我有一个网络应用程序,我想为每个用户使用不同的日志,这样我就可以了解用户在系统上所做的事情的“历史记录”。
这是我目前所拥有的:
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/