logback日誌配置

最近在使用logback日誌框架時遇到一個參數設置問題,被坑了很久,還以為是運維在線上把我們日誌刪除了呢。

之前的日誌一直都是按天自動切割保存,保留30天。發現日誌太大難以閱讀,我變更為按小時切割,按天作為文件夾來保存。可是發現日誌總是隻保留當前和前一天的日誌,很是不解。看了下官方文檔,也說這個參數就是日誌保留的最大天數。

先看下面的配置文件,頭條的編輯器也是醉了,代碼排版實在是糟糕,就用圖片來替代。

logback日誌配置

logback日誌配置

logback日誌配置

logback日誌配置

注意這一段配置:


<rollingpolicy>
<filenamepattern>${LOG_DIR}/%d{dd,aux}/info.log-%d{yyyy-MM-dd-HH}-%i/<filenamepattern>

<maxhistory>720/<maxhistory>

<maxfilesize>800MB/<maxfilesize>
<totalsizecap>10GB/<totalsizecap>
/<rollingpolicy>

一開始按天保存日誌文件時 <maxhistory>30/<maxhistory>,確實保留了30天的日誌。修改為小時候,就不是這個意思了。後來看了下文檔和一些描述,發現別人的建議居然是讓把 <filenamepattern>${LOG_DIR}/%d{dd,aux}/info.log-%d{yyyy-MM-dd}-%i/<filenamepattern>改為天的格式。很是困苦,我也知道天是沒問題的呀。

翻了下源代碼,簡單理了下,沒注意它滾動清理日誌都是怎麼來計算要刪除的文件的。看了下日誌,猜想是不是這個數字的問題。按天是30天,那按小時也還是表示30天的意思嗎!於是本地修改為按分鐘,同時打印 log.info() 和 log.error(),文件大小為 1k 這樣每分鐘肯定切割了好多個文件,<maxhistory>3/<maxhistory> 讓滾動刪除3分鐘之前的日誌。確實發覺,這個 maxHistory 就是按 fileNamePattern 配置的日誌文件切割頻率來滾動的。

我的切割頻率是按小時,那如果設置為30就是刪除30小時前的日誌。去線上看了下,的確如此,有點愧疚,就跟不能隨便改任何一行代碼一樣,一不小心就翻船了。


分享到:


相關文章: