1. 程式人生 > >logback按時間與檔案大小共同作用列印日誌

logback按時間與檔案大小共同作用列印日誌

最近log4j的日誌框架滿足不了專案開發的需求,於是找了logback這個生來就是為了超越並替代log4j的框架,但是要同時按時間和檔案大小來列印日誌的要求並沒有一個appender可以滿足,在網上查了很久也用了很多方法,都起不到預想的效果。很多方法是帶回滾的,當設定了一個值後,日誌超過這個限定便是會把以往的日誌刪除,這也有防止日誌無限堆積的好處,但我現在是不想讓日誌被刪除。

直到我找到了logback中文文件,一個前輩翻譯的,從中我找到了解決方案。配置如下:

<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">  
    <encoding>UTF-8</encoding>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
        <FileNamePattern>${catalina.home}/logs/error.%d{yyyy-MM-dd}.%i.log</FileNamePattern>  
        <timeBasedFileNamingAndTriggeringPolicy     class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">     
    		<maxFileSize>100MB</maxFileSize>    
		</timeBasedFileNamingAndTriggeringPolicy> 
    </rollingPolicy>  
    <encoder>  
        <pattern>[%date{yyyy-MM-dd HH:mm:ss}] [%-5level] [%logger:%line] --%mdc{client} %msg%n</pattern>  
    </encoder> 
</appender>  


依舊是ch.qos.logback.core.rolling.RollingFileAppender這個class,引用rollingPolicy時呼叫ch.qos.logback.core.rolling.TimeBasedRollingPolicy這個class,進行FileNamePattern配置。在rollingPolicy裡再引用timeBasedFileNamingAndTriggeringPolicy,注意class用ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP,這個是官方文件裡的class,之前在網上找到的沒有用這個會導致整個不起效果。
這個配置達到的效果是,按每天日期列印日誌,若一個日誌檔案達到100MB時,便建立新的日誌檔案,已建立的日誌檔案不會被程式自動刪除。所得日誌檔名如 error.2017-03-17.0.log
error.2017-03-17.1.log
error.2017-03-17.2.log
若要定期刪除日誌,在rollingPolicy里加
<maxHistory>30</maxHistory> 
這個配置裡的數字單位是看fileNamePattern裡配置的日期格式來確定,如上面配置日期格式是yyyy-MM-dd,配置到天,那麼這裡的30指的就是保留30天的日誌,在第31天之後,每天會刪除30天前的日誌。