【问题标题】:multiple root loggers with logback conditionals具有 logback 条件的多个根记录器
【发布时间】:2017-05-29 13:24:51
【问题描述】:

参考: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>

注意有两个&lt;root&gt; 元素!我很困惑,因为我没有看到任何 &lt;else&gt; 元素,我会假设 FILE 附加程序和第二个根记录器仍在运行,即使主机名是“torino”。

这是一个有效的例子吗?当一个不在&lt;if&gt;&lt;else&gt; 中时,为什么在这种情况下允许两个&lt;root&gt; 记录器

我错过了什么???

【问题讨论】:

  • 它谈论的是严格的 XML 语法,指出最多允许一个 &lt;root&gt; 元素作为 &lt;configuration&gt; 元素的 direct 子元素。另一个 &lt;root&gt; 元素是 &lt;then&gt; 元素的子元素,因此不会违反 XML 语法。
  • @andreas 仍然没有回答哪个根记录器处于活动状态的问题。一个胜过另一个,还是它们以某种方式合并??
  • 你实际上并没有问这个问题。您只问为什么允许两个 &lt;root&gt; 元素,即使文档说“最多一个”。我会说两者都有效。注意第一个&lt;root&gt; 元素没有level 属性。它只是向根添加另一个附加程序。

标签: java logging logback slf4j


【解决方案1】:

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

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

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

【讨论】:

  • 会做Ceki。只是为了确保有人说,谢谢你提供了一个很棒的图书馆!我对“”实际上在做什么感到困惑。感谢@Andreas 的澄清。
猜你喜欢
  • 1970-01-01
  • 2021-08-23
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
  • 2016-01-25
  • 1970-01-01
  • 2016-12-13
  • 1970-01-01
相关资源
最近更新 更多