背景:
前兩天在看線上問題的時候,突然發現在logback.xml文件註釋了debug級別的日誌輸出,導致info,warn,error級別的日誌都不輸出了。
logback.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="logPath" value="E:/workspace/log/user-log1/" />
<appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${logPath}server-debug.log</File>
<encoder>
<pattern>%d{yyyy-MM-dd.HH:mm:ss} [%5p] %c{50} %3L %M %m%n</pattern>
</encoder>
<!-- 只輸出debug級別的日誌 -->
<filter class = "ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${logPath}server-debug.log.%d{yyyy-MM-dd}</fileNamePattern>
<maxHistory>2</maxHistory>
</rollingPolicy>
</appender>
<appender name="info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${logPath}/server-info.log</File>
<encoder>
<pattern>%d{yyyy-MM-dd.HH:mm:ss} [%5p] %c{50} %3L %M %m%n</pattern>
</encoder>
<filter class = "ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${logPath}/server-info.log.%d{yyyy-MM-dd}</fileNamePattern>
<maxHistory>2</maxHistory>
</rollingPolicy>
</appender>
<appender name="warn" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${logPath}/server-warn.log</File>
<encoder>
<pattern>%d{yyyy-MM-dd.HH:mm:ss} [%5p] %c{50} %3L %M %m%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>warn</level>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${logPath}/server-warn.log.%d{yyyy-MM-dd}</fileNamePattern>
</rollingPolicy>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- 日誌輸出編碼 -->
<Encoding>UTF-8</Encoding>
<layout class="ch.qos.logback.classic.PatternLayout">
<!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日誌消息,%n是換行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
</pattern>
</layout>
</appender>
<appender name="debug1" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${logPath}debug1.log</File>
<Encoding>UTF-8</Encoding>
<encoder>
<pattern>%d{yyyy-MM-dd.HH:mm:ss} [%5p] %c{50} %3L %M %m%n</pattern>
</encoder>
<!-- 只輸出level級別以上的日誌 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>debug</level>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${logPath}debug1.log.%d{yyyy-MM-dd}</fileNamePattern>
</rollingPolicy>
</appender>
<logger name="com.baidu.soa.crm.user.Main" level="DEBUG" additivity="false">
<appender-ref ref="debug1"/>
</logger>
<logger name="com.baidu.soa.crm.user" additivity="false">
<appender-ref ref="debug" />
<appender-ref ref="info"/>
<appender-ref ref="warn"/>
<appender-ref ref="STDOUT"/>
</logger>
<root level="debug"></root>
</configuration>
注意其中
<logger name="com.baidu.soa.crm.user.Main" level="DEBUG" additivity="false">
<appender-ref ref="debug1"/>
</logger>
這個logger中配置的name已經是包具體的類名,而且additivity=false,表明日誌大於這個級別的級別將不向上繼續拋出。
所以導致
<logger name="com.baidu.soa.crm.user" additivity="false">
<appender-ref ref="debug" />
<appender-ref ref="info"/>
<appender-ref ref="warn"/>
<appender-ref ref="STDOUT"/>
</logger>
輸出不了大於debug級別的日誌類型。如果在com.baidu.soa.crm.user包其他的類型則能夠正常的輸出debug級別以上的日誌。