Различный журнал для каждого пользователя, использующего Log4j - PullRequest
5 голосов
/ 06 октября 2010

У меня есть веб-приложение, и я хочу использовать разные журналы для каждого пользователя, чтобы у меня была «история» того, что пользователь делал в системе.

Это то, что я имею до сих пор:

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

}

Проблема в том, что как веб-приложение является многопоточным, так что AFAIK я не могу использовать RootLogger все время и меняю дополнения в зависимости от пользователя, которого я регистрирую. Я думаю, что я должен создать разные Logger для каждого пользователя, но это правильно?

Ответы [ 3 ]

4 голосов
/ 06 октября 2010

Попробуйте переключиться на logback (преемник log4j).Он поставляется с SiftingAppender , который можно использовать для разделения (или просеивания) ведения журнала в соответствии с заданным атрибутом среды выполнения, который в вашем случае будет «ИД пользователя».Документация содержит пример разделения журналов на основе идентификатора пользователя.

2 голосов
/ 06 октября 2010

«Вложенный диагностический контекст» предназначен для такого случая использования - вы можете ставить отметку в каждом операторе журнала с идентификатором пользователя (например, IP-адрес, имя пользователя и т. Д.)

больше здесь: http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/NDC.html

(редактировать: вот еще один полезный пост на NDC: Когда использовать «вложенный диагностический контекст» (NDC)? )

2 голосов
/ 06 октября 2010

Я бы предложил использовать информацию контекста журнала, чтобы записать пользователя для какого-либо конкретного действия, и включить его в свои записи журнала.

Тогда всякий раз, когда вам нужен журнал для конкретного пользователя, просмотрите один журналфайл.Если вам нужно разделить все файлы, сделайте это, когда журнал вращается.Эта постобработка будет намного проще, чем сохранение открытого файла для каждого пользователя одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...