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將資訊列印到控制檯;