java - 每个使用 Log4j 的用户都有不同的日志

标签 java web-applications log4j

我有一个网络应用程序,我想为每个用户使用不同的日志,这样我就可以了解用户在系统上所做的事情的“历史记录”。

这是我目前所拥有的:

import java.io.File;
import java.io.IOException;

import org.apache.log4j.DailyRollingFileAppender;
import org.apache.log4j.FileAppender;
import org.apache.log4j.SimpleLayout;
import org.apache.log4j.Logger;

public class LogManager {

    public Logger getLog(String username) throws IOException{
        SimpleLayout layout = new SimpleLayout(); 
        FileAppender appender = new DailyRollingFileAppender(layout, "users"+File.pathSeparator+username+File.pathSeparator+username, "'.'yyyy-MM");

        // configure the appender here, with file location, etc
        appender.activateOptions();
        Logger logger = Logger.getRootLogger();
        logger.addAppender(appender);
        return logger;
    }

}

问题是,作为一个 web 应用程序,它是多线程的,所以据我所知,我不能一直使用 RootLogger 并根据我正在登录的用户更改附加程序。我想我应该为每个用户创建不同的 Logger,但这样正确吗?

最佳答案

尝试切换到 logback (log4j 的继任者)。它带有 SiftingAppender它可用于根据给定的运行时属性分离(或筛选)日志记录,在您的情况下为“userid”。 documentation包含基于用户 ID 分离日志的示例。

关于java - 每个使用 Log4j 的用户都有不同的日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3870326/

相关文章:

java - 统一查询语言以访问异构数据库中的数据

Java for循环创建n个对象

java - 测量单位是否应始终包含在所有变量名称中?

log4j - OSGi 的类加载问题

java - 无法到达服务器时程序关闭

web-applications - c3p0 中的内存泄漏 - java.lang.NoClassDefFoundError : com/mchange/v2/resourcepool/BasicResourcePool

jquery - 我可以使用 jquery Mobile 创建基于桌面浏览器的 Web 应用程序吗?

web-applications - 使用 Lift 的购物车

tomcat - log4j 滚动文件(日志应用程序)

java - 是否可以让 log4j 显示它用来配置自己的文件?