Подтвердить что ты не робот

Как создать 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).

Вся помощь приветствуется. Спасибо.

4b9b3361

Ответ 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>