Logback级别元素与级别属性

时间:2017-09-19 13:40:35

标签: logback slf4j logback-classic

问题很简单。在一些logback.xmls中,我将level视为一个元素:

<logger name="mylog" additivity="false">
  <level value="DEBUG" />
  <appender-ref ref="fileAppender" />
</logger>

但在某些情况下,它被写为属性:

<logger name="mylog" additivity="false" level="debug">
  <appender-ref ref="fileAppender" />
</logger>

有什么区别?

感谢。

1 个答案:

答案 0 :(得分:1)

在配置Logback方面,没有区别。以下两个声明在功能上都是相同的:

<logger name="com.x.y">
    <level value="DEBUG"/>
</logger>

<logger name="com.x.y" level="DEBUG" />

Logback的配置器(查看ch.qos.logback.core.joran.GenericConfigurator.doConfigure())为这两个声明创建了一个相同的Logger实例。

唯一的区别 - 解析配置时 - 第一个显示的是ch.qos.logback.core.joran.event.SaxEvent(记录器和级别的开始和结束事件)的更多实例,而不是第二个(开始和结束事件)仅记录器。

如果要将记录器与特定的appender相关联,那么您已经在定义一个记录器元素体,例如

<logger name="com.x.y">
    <appender-ref ref="STDOUT"/>
</logger>

在这种情况下,在元素主体中定义level而不是属性可能会更好地读取,但实际上只是开发人员偏好的情况。