Tomcat各種日誌的關係與catalina.out檔案的分割

東北小狐狸發表於2021-10-14

Tomcat 各日誌之間的關係

一圖勝千言!

其他日誌如 localhost.{yyyy-MM-dd}.loglocalhost-access.{yyyy-MM-dd}.loglocalhost 是context的名稱,往往一個應用程式是一個名稱。

分割 catalina.out

按上圖所示,隨著執行時間變久 catalina.out 只會越來越大,但控制檯輸出的日誌也有用,比如某些開發人員喜歡使用e.printStackTrace()System.out.println()System.err.println() 都會列印到 catalina.out 中, 這些日誌也有用!所以就需要日誌分割做備份。

最簡單的方法是使用 Linux 自帶的 logrotate(日誌輪轉)功能分割 catalina.out。

以 catalina.out 路徑為 /opt/tomcat/logs/catalina.out 舉例:

#進入 /etc/logrotate.d,此目錄是 logrotate.d 子系統的配置目錄,不推薦修改主配置檔案。
cd /etc/logrotate.d
cat > tomcat<<EOF
/opt/tomcat/logs/catalina.out{
        copytruncate
	daily
        rotate 15
        compress
        missingok
        notifempty
        size 200M
        dateext
}
EOF

以上配置說明:

  • /opt/tomcat/logs/catalina.out #catalina.out存放地址
  • copytruncate #拷貝原日誌檔案,並將其清空
  • daily #每日切割
  • rotate 15 #最多保留15個檔案
  • compress #壓縮分割後的檔案
  • missingok #允許catalina.out檔案不存在,待檔案出現再開始切割
  • notifempty #當日志檔案為空時,不進行輪轉
  • size 200M #當catalina.out檔案大於200M時切割
  • dateext # 日期擴充套件,將切割後的日誌檔名新增日期

更多配置引數:

compress #通過gzip 壓縮轉儲以後的日誌
nocompress #不做gzip壓縮處理
copytruncate #用於還在開啟中的日誌檔案,把當前日誌備份並截斷;是先拷貝再清空的方式,拷貝和清空之間有一個時間差,可能會丟失部分日誌資料。
nocopytruncate #備份日誌檔案不過不截斷
create mode owner group #輪轉時指定建立新檔案的屬性,如create 0777 nobody nobody
nocreate #不建立新的日誌檔案
delaycompress #和compress 一起使用時,轉儲的日誌檔案到下一次轉儲時才壓縮
nodelaycompress #覆蓋 delaycompress 選項,轉儲同時壓縮。
missingok #如果日誌丟失,不報錯繼續滾動下一個日誌
errors address #專儲時的錯誤資訊傳送到指定的Email 地址
ifempty #即使日誌檔案為空檔案也做輪轉,這個是logrotate的預設選項。
notifempty #當日志檔案為空時,不進行輪轉
mail address #把轉儲的日誌檔案傳送到指定的E-mail 地址
nomail #轉儲時不傳送日誌檔案
olddir directory #轉儲後的日誌檔案放入指定的目錄,必須和當前日誌檔案在同一個檔案系統
noolddir #轉儲後的日誌檔案和當前日誌檔案放在同一個目錄下
sharedscripts #執行postrotate指令碼,作用是在所有日誌都輪轉後統一執行一次指令碼。如果沒有配置這個,那麼每個日誌輪轉後都會執行一次指令碼
prerotate #在logrotate轉儲之前需要執行的指令,例如修改檔案的屬性等動作;必須獨立成行
postrotate #在logrotate轉儲之後需要執行的指令,例如重新啟動 (kill -HUP) 某個服務!必須獨立成行
daily #指定轉儲週期為每天
weekly #指定轉儲週期為每週
monthly #指定轉儲週期為每月
rotate count #指定日誌檔案刪除之前轉儲的次數,0 指沒有備份,5 指保留5 個備份
dateext #使用當期日期作為命名格式
dateformat .%s #配合dateext使用,緊跟在下一行出現,定義檔案切割後的檔名,必須配合dateext使用,只支援 %Y %m %d %s 這四個引數
size 數值與單位 #當日志檔案到達指定的大小時才轉儲,缺少單位是bytes,可指定KB、MB

更多引數部分參考自文章:https://cloud.tencent.com/developer/article/1681716

相關文章