Как создать 2 разных регистратора ROOT с записью?
Я с удовольствием использую SLF4J с записью и использую 2 appenders для журнала ROOT.
<root level="DEBUG">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
Как мы можем иметь разные уровни регистрации для обоих приложений? Мне все еще нужны все сообщения ROOT-logger.
- Уровень DEBUG для STDOUT
- INFO-уровень для FILE
Весь журнал должен быть частью вывода (поэтому необходим регистратор ROOT).
Вся помощь приветствуется. Спасибо.
Ответы
Ответ 1
У вас никогда не будет более одного корневого регистратора, поэтому ваш вопрос немного вводит в заблуждение. То, что вы ищете, - это то, как точно настроить, какие события регистрируются каждым из участников.
И для этого вы добавляете ThresholdFilter для каждого из добавок:
http://logback.qos.ch/manual/filters.html#thresholdFilter
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
Настройте уровень INFO для FILE-appender и DEBUG для STDOUT.
Изменить: мне нужно оспаривать другой ответ, что это неверно: да, в конфигурации может быть более одного элемента root . Это не создает более одного корневого logger, но это то, о чем спрашивает название вопроса. Кроме того, в справочнике журнала указано http://logback.qos.ch/manual/configuration.html#syntax (выделение моего):
Тем не менее, самая основная структура конфигурационного файла может описываютс как < конфигурации > , за которым следует ноль или более <appender> , за которыми следуют ноль или более <logger> элементы, а затем не более одного root > .
Это может сработать, но, по крайней мере, против конвенции.
Ответ 2
Предыдущий ответ неверен: у вас может быть несколько элементов root
, каждый из которых связан с журналом level
и appender-ref
(я работаю с logback.version > 1.0.13
)
В этом случае вам также нужно поместить ФИЛЬТР внутри ваших приложений, например:
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
<resetJUL>true</resetJUL>
</contextListener>
<!-- To enable JMX Management -->
<jmxConfigurator/>
<appender name="console-info" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>
<appender name="console-debug" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>[%d{ddMMMyyyy HH:mm:ss.SS}]%-5level %logger{45} - %msg %n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="console-info"/>
</root>
<root level="debug">
<appender-ref ref="console-debug"/>
</root>