LOG4J несколько регистраторов в одном классе - PullRequest
3 голосов
/ 05 октября 2011

У меня есть проект Java, который имеет log4j ведения журнала. Для входа в файл он использует скользящий файл appender и несколько регистраторов. Я хочу добавить DBappender и иметь отдельный регистратор, который пишет только этому приложению, и ни один из других регистраторов не отправляет ему сообщения. Мне нужно, скажем, в одном классе иметь два регистратора, один для записи в fileAppender и один для записи в dbAppender. Возможно ли это, если да, какова конфигурация для него?

Спасибо

1 Ответ

6 голосов
/ 05 октября 2011

Можно использовать два Logger в одном классе.

Первая идея: получить два регистратора с разными именами:

package com.mycompany.apackage.MyClass;

public class MyClass {
    private static final logger = Logger.getLogger(Myclass.class)
    private static final dbLogger = Logger.
        getLogger(Myclass.class.getName() + ".dblogger")
}

Конфигурация для пакета dbLogger:

<root> 
    <appender-ref ref="mainlog" /> 
</root> 

<logger name="com.mycompany.apackage.MyClass.dblogger">
    <appender-ref ref="dbappender" />
</logger>

(не проверено).В этом случае dbLogger также регистрируется для приложения mainlog.Если это не подходит, вы можете использовать пользовательский фильтр в mainlog (и других) приложениях, который отфильтровывает сообщения dbLogger.Другое решение заключается в использовании совершенно другого префикса для dbLogger:

    private static final logger = Logger.getLogger(Myclass.class)
    private static final dbLogger = Logger.
        getLogger("dblogger." + Myclass.class.getName())

Log4j config:

<root> 
</root> 

<logger name="com.mycompany">
    <appender-ref ref="mainlog" />
</logger>
<logger name="dblogger.com.mycompany">
    <appender-ref ref="dbappender" />
</logger>

Обратите внимание, что если вы передадите тот же параметр методу getLogger(), выполучит один и тот же Logger объект, поэтому вам придется использовать разные имена.

...