logback按時間與檔案大小共同作用列印日誌
阿新 • • 發佈:2019-02-12
最近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,之前在網上找到的沒有用這個會導致整個不起效果。
error.2017-03-17.1.log
error.2017-03-17.2.log
若要定期刪除日誌,在rollingPolicy里加
<maxHistory>30</maxHistory>
這個配置裡的數字單位是看fileNamePattern裡配置的日期格式來確定,如上面配置日期格式是yyyy-MM-dd,配置到天,那麼這裡的30指的就是保留30天的日誌,在第31天之後,每天會刪除30天前的日誌。