1. 程式人生 > >logger 日誌心得

logger 日誌心得

在logback.xml配置檔案中的關鍵是logger的節點

<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <File>${LOG_HOME}/${COMPONENT_ID}.${SEGMENT_ID}.error.log</File>
        <rollingPolicy class="logback.rolling.log.gather.TimeBasedBackUpRollingPolicy">
            <FileNamePattern>${LOG_HOME}/${COMPONENT_ID}.${SEGMENT_ID}.error.log.%i.zip
            </FileNamePattern>
            <MinIndex>1</MinIndex>
            <MaxIndex>10</MaxIndex>
        </rollingPolicy>
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>25MB</MaxFileSize>
        </triggeringPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX} %level ${COMPONENT_ID}.${SEGMENT_ID} [%thread] [%logger{50}:%line] %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

<appender name="OTHER" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>WARN</level>
        </filter>
        <File>${LOG_HOME}/${COMPONENT_ID}.${SEGMENT_ID}.other.log</File>
        <rollingPolicy class="logback.rolling.log.gather.TimeBasedBackUpRollingPolicy">
            <FileNamePattern>${LOG_HOME}/${COMPONENT_ID}.${SEGMENT_ID}.other.%i.log.zip
            </FileNamePattern>
            <MinIndex>1</MinIndex>
            <!--最多十個檔案 -->
            <MaxIndex>10</MaxIndex>
        </rollingPolicy>
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>25MB</MaxFileSize>
        </triggeringPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX} %level ${COMPONENT_ID}.${SEGMENT_ID} [%thread] [%logger{50}:%line] - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

<logger name="com.hikvision.ldap" level="DEBUG" additivity="false">
        <appender-ref ref="OTHER" />
    </logger>

這個意思是將com.hikvision.ldap下的類中的debug級別和以上級別的日誌輸出丟到other的檔案日誌中

 

    <root level="WARN">
        <appender-ref ref="OTHER" />
    </root>

root節點的作用這個OTHER頂級是warn級別,指向這個的logger,如果指定級別就用自己的,比如info,最終就是info,additivity如果是true,則會向上級丟擲的向root的,如果符合root級別會在列印一遍。(有點父類和子類的關係是的)

 

其中appender的配置表示列印到控制檯(稍後詳細講解appender );
<logger name="logback" />將控制logback包下的所有類的日誌的列印,但是並沒用設定列印級別,所以繼承他的上級<root>的日誌級別“DEBUG”;
沒有設定addtivity,預設為true,將此loger的列印資訊向上級傳遞;
沒有設定appender,此loger本身不列印任何資訊。
<root level="DEBUG">將root的列印級別設定為“DEBUG”,指定了名字為“STDOUT”的appender。

當執行logback.LogbackDemo類的main方法時,因為LogbackDemo 在包logback中,所以首先執行<logger name="logback" />,將級別為“DEBUG”及大於“DEBUG”的日誌資訊傳遞給root,本身並不列印;
root接到下級傳遞的資訊,交給已經配置好的名為“STDOUT”的appender處理,“STDOUT”appender將資訊列印到控制檯;