LogBack學習

背景:
前兩天在看線上問題的時候,突然發現在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級別以上的日誌。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章