controller.java
@GetMapping("/allLog")
public String allLog() {
logger.trace("------>trace Msg");
logger.debug("------>debug Msg");
logger.info("------>info Msg");
logger.warn("------>warn Msg");
logger.error("------>error Msg");
return "success";
}
<logger name="com.mpt.mylog.controller" level="debug" additivity="false"/>
<logger name="root" level="INFO">
<appender-ref ref="logfile_error"/>
<appender-ref ref="logfile_debug"/>
<appender-ref ref="logfile_info"/>
<appender-ref ref="logfile_console"/>
</logger>
当配置了additivity后,该logger处理的日志不会再交由父级处理
现象:控制台没打印,文件没记录,因为该logger未配置appender且不向父级传递日志信息。
当把root中的appender-ref都拷贝到上面的logger里面,则控制台打印,文件有记录。
<logger name="com.mpt.mylog.controller" level="warn" />
<logger name="root" level="INFO">
<appender-ref ref="logfile_error"/>
<appender-ref ref="logfile_debug"/>
<appender-ref ref="logfile_info"/>
<appender-ref ref="logfile_console"/>
</logger>
level属性的传递性:当子logger未设置level属性时,会设置为父级的level,即使设置了additivity=”false“,这足以证明level的传递性与additivity无关,仅与有无level属性有关。
需要注意的是,要注意避免下面这种配置写法 :
<logger name="com.mpt.mylog.controller" level="debug" >
<appender-ref ref="logfile_error"/>
<appender-ref ref="logfile_debug"/>
<appender-ref ref="logfile_info"/>
<appender-ref ref="logfile_console"/>
</logger>
<logger name="root" level="warn">
<appender-ref ref="logfile_error"/>
<appender-ref ref="logfile_debug"/>
<appender-ref ref="logfile_info"/>
<appender-ref ref="logfile_console"/>
</logger>
由于additivity属性默认是true,所以日志会传递到父级进行处理,所以这种配置会产生下面的结果
951171 [http-nio-9099-exec-8] DEBUG c.m.mylog.controller.DemoController - ------>debug Msg
951171 [http-nio-9099-exec-8] DEBUG c.m.mylog.controller.DemoController - ------>debug Msg
951172 [http-nio-9099-exec-8] INFO c.m.mylog.controller.DemoController - ------>info Msg
951172 [http-nio-9099-exec-8] INFO c.m.mylog.controller.DemoController - ------>info Msg
951174 [http-nio-9099-exec-8] WARN c.m.mylog.controller.DemoController - ------>warn Msg
951174 [http-nio-9099-exec-8] WARN c.m.mylog.controller.DemoController - ------>warn Msg
951174 [http-nio-9099-exec-8] ERROR c.m.mylog.controller.DemoController - ------>error Msg
951174 [http-nio-9099-exec-8] ERROR c.m.mylog.controller.DemoController - ------>error Msg
即additivity为true且子logger已经设置level属性时,父级的level会被覆盖。
利用这个特点,可以使用下面的配置实现子级logger配置特有appender,root配置公有appender。比如下面示例,下面这种使用情况应该基本不存在
<logger name="com.mpt.mylog.controller" level="debug" >
<appender-ref ref="logfile_console"/>
</logger>
<logger name="root" level="warn">
<appender-ref ref="logfile_error"/>
<appender-ref ref="logfile_debug"/>
<appender-ref ref="logfile_info"/>
</logger>
emmmm。。。这种东西知道了 也没太大用处,尽量还是使用下面这种比较标准的配置吧
<logger name="com.ht" level="DEBUG"/>
<logger name="ht" level="DEBUG"/>
<logger name="root" level="INFO">
<appender-ref ref="logfile_error"/>
<appender-ref ref="logfile_debug"/>
<appender-ref ref="logfile_info"/>
<appender-ref ref="logfile_console"/>
</logger>
嗯 这种还是最好用的










网友评论