具有 logback 条件的多个根记录器

multiple root loggers with logback conditionals

指的是: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 和第二个根记录器仍在运行,即使主机名是 "torino".

这是一个有效的例子吗?为什么在这种情况下允许两个 <root> 记录器,而一个不在 <if><else>

我错过了什么???

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

这绝对值得在 logback 文档中进行澄清。您可以在 http://jira.qos.ch 提交错误报告吗?引用这个 Whosebug 条目应该足够了。

至于哪个根记录器处于活动状态,假设条件为真,则它们都将处于活动状态。名为 FILE 和 CON 的附加程序都将附加到根记录器。级别将设置为最后设置的值。请注意,条件中的根元素未设置级别。