使用Log4j的每个用户的不同日志

pak*_*ore 5 java log4j web-applications

我有一个web应用程序,我想为每个用户使用不同的日志,因此我可以拥有用户在系统上所做的"历史记录".

这是我到目前为止:

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;
    }

}
Run Code Online (Sandbox Code Playgroud)

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

dog*_*ane 4

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