具有回退条件的多个根记录器

时间:2017-01-14 05:19:10

标签: java logging logback slf4j

指的是:Logback's Configuration

我的配置可以包含 ...at most one <root> element...

但后来在同一个文档中,在讨论条件时,我看到了:

<configuration debug="true">
  <if condition='property("HOSTNAME").contains("torino")'>
    <then>
      <appender name="CON" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
          <pattern>%d %-5level %logger{35} - %msg %n</pattern>
        </encoder>
      </appender>
      <root> <------ root logger #1
        <appender-ref ref="CON" />
      </root>
    </then>
  </if>

  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>${randomOutputDir}/conditional.log</file>
    <encoder>
      <pattern>%d %-5level %logger{35} - %msg %n</pattern>
   </encoder>
  </appender>

  <root level="ERROR"> <------ root logger #2
     <appender-ref ref="FILE" />
  </root>
</configuration>

请注意,有两个<root>元素!我很困惑,因为我没有看到任何<else>元素,我会假设FILE appender和第二个根记录器仍然在播放,即使主机名是&#34; torino&# 34。

这是一个有效的例子?为什么在这种情况下,如果一个<root><if>

,则允许使用两个<else>记录器

我错过了什么?

1 个答案:

答案 0 :(得分:4)

免责声明:我是logback项目的维护者。

这绝对值得在logback文档中进行说明。你能否在http://jira.qos.ch提交错误报告?引用此StackOverflow条目就足够了。

对于哪个根记录器处于活动状态,假设条件为真,它们将同时处于活动状态。名为FILE和CON的两个appender都将附加到根记录器。级别将设置为最后一个值集。请注意,条件中的根元素不设置级别。