logback配置黄金法则_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > logback配置黄金法则

logback配置黄金法则

 2018/1/12 18:46:28  spjich  程序员俱乐部  我要评论(0)
  • 摘要:不少人会有logback.xml里面root与logger关系,他们之间如何继承如何配置才能达到需求的问题,网上归纳的很凌乱,以下是个人总结的几条黄金法则。root是公共属性,没有logger时会找root里对应level的appenderadditivity默认为true,为true时会忽略level限制并继承root节点中配置的所有属性说明:additivity为true时,默认会继承所有root节点下配置的所有appender,例如你配了2个root
  • 标签:配置 黄金法则

?

不少人会有logback.xml里面root与logger关系,他们之间如何继承如何配置才能达到需求的问题,网上归纳的很凌乱,以下是个人总结的几条黄金法则

?

  • root是公共属性,没有logger时会找root里对应level的appender
  • additivity默认为true,为true时会忽略level限制并继承root节点中配置的所有属性

说明:additivity为true时,默认会继承所有root节点下配置的所有appender,例如你配了2个root,每个root下各自有1个appender,那么你的logger节点同时会继承这两个appender(appender name不同),且和日志的级别无关,

多个root之间的appender如果有重复,会按appender的name属性自动去重

而logger下的appender与root下appender的不会去重,比如你logger下的appender打到控制台,logger下的也打到控制台,那么最后结果是日志打两遍

  • additivity为false时,会忽略root中的所有配置的appender,只生效logger下的appender

?

?

建议:如果没太多要求的话,配root就行,这样会比较省事

如果对日志打印方式有要求,可以只配logger然后再logger下分别配置appender,这样会有一点冗余,但是至少不会出错。

?

?

?

?

下面是一个小例子,只粘贴出了logger与root部分

?

class="xml" name="code">    <logger name="org" level="INFO"/>
    <logger name="ch.qos.logback" level="INFO"/>
    <logger name="com.alibaba.dubbo" level="INFO"/>
    <logger name="net" level="INFO"/>
    <logger name="com.fnic" level="INFO" additivity="false">
        <appender-ref ref="stdout"/>
        <appender-ref ref="logFileInfo"/>
    </logger>
    <logger name="**.***.***.xxController" additivity="false" level="DEBUG">
        <appender-ref ref="stdout"/>
        <appender-ref ref="logFileDebug"/>
        <appender-ref ref="logFileInfo"/>
    </logger>


    <!--TRACE<DEBUG<INFO<WARN<ERROR-->
    <root level="INFO">
        <appender-ref ref="stdout"/>
        <appender-ref ref="logFileInfo"/>
    </root>

?

?

解析

   <logger name="org" level="INFO"/>
    <logger name="ch.qos.logback" level="INFO"/>
    <logger name="com.alibaba.dubbo" level="INFO"/>
    <logger name="net" level="INFO"/>

这一段由于没有monospace;"><appender-ref>元素并且又没配置additivity="false" 所以会继承root里的所有appender,所以<root level="INFO"> 这个下面所有appender生效。这种情况下的继承是不分root的level的,所有root都会被继承到

?

<logger name="com.fnic" level="INFO" additivity="false">
        <appender-ref ref="stdout"/>
        <appender-ref ref="logFileInfo"/>
    </logger>

这段是针对com.fnic包下所有class的日志配置,由于配置了additivity=false,所以只会生效 <appender-ref ref="stdout"/>以及<appender-ref ref="logFileInfo"/>这两行

?

 <logger name="**.***.***.xxController" additivity="false" level="DEBUG">
        <appender-ref ref="stdout"/>
        <appender-ref ref="logFileDebug"/>
        <appender-ref ref="logFileInfo"/>
    </logger>

这一段是针对xxController这个类的配置,此类所有DEBUG级别以上的日志信息都会按<appender-ref ref="stdout"/>?<appender-ref ref="logFileDebug"/><appender-ref ref="logFileInfo"/>3个appender打印,并且有配置additivity=false 也不会继承任何root

?

?

?

?

?

发表评论
用户名: 匿名