使用Log4j的每个用户的不同日志 [英] A different log for every user using Log4j

查看:119
本文介绍了使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆