使用Log4j的每个用户的不同日志 [英] A different log for every user using Log4j
问题描述
我有一个web应用程序,我想为每个用户使用不同的日志,因此我可以获得用户在系统上所做的历史记录。
I have a webapplication and I want to use a different log for every user, so I can have a "history" of what the user did on the system.
这是我到目前为止:
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;
}
}
问题是,作为一个webapplication是多线程的,所以AFAIK我不能一直使用 RootLogger
并根据我正在登录的用户更改appender。我想我应该为每个用户创建不同的 Logger
,但这是正确的吗?
The problem is that, as a webapplication, is multithreaded, so AFAIK I can't use RootLogger
all the time and change the appenders depending on the user who I'm logging. I think I should create different Logger
for each user, but is that correct?
推荐答案
尝试切换到 logback (log4j的后继者)。它附带一个 SiftingAppender ,可用于分离(或筛选)日志记录到给定的运行时属性,在您的情况下将是userid。 文档包含基于用户标识分隔日志的示例。
Try switching to logback (log4j's successor). It comes with a SiftingAppender which can be used to separate (or sift) logging according to a given runtime attribute, which would be "userid" in your case. The documentation contains an example for separating logs based on userid.
这篇关于使用Log4j的每个用户的不同日志的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!