【发布时间】:2017-05-29 13:24:51
【问题描述】:
我的配置可以包含
...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 附加程序和第二个根记录器仍在运行,即使主机名是“torino”。
这是一个有效的例子吗?当一个不在<if> 或<else> 中时,为什么在这种情况下允许两个<root> 记录器
我错过了什么???
【问题讨论】:
-
它谈论的是严格的 XML 语法,指出最多允许一个
<root>元素作为<configuration>元素的 direct 子元素。另一个<root>元素是<then>元素的子元素,因此不会违反 XML 语法。 -
@andreas 仍然没有回答哪个根记录器处于活动状态的问题。一个胜过另一个,还是它们以某种方式合并??
-
你实际上并没有问这个问题。您只问为什么允许两个
<root>元素,即使文档说“最多一个”。我会说两者都有效。注意第一个<root>元素没有level属性。它只是向根添加另一个附加程序。
标签: java logging logback slf4j