後端開發常遇到的一個問題是,服務産生的日志檔案過大,在使用日志檔案排查問題時,
如果檔案過大,會降低排查問題的效率;而且不對檔案進行切割,就沒法單獨的壓縮較久遠的日志,浪費磁盤空間
下面介紹 linux 下常用的日志切割工具 logrotate 的使用。
linux 系統預設安裝了 logrotate,通常由 cron 程式定時執行,執行周期是一天;
可以檢視 cron 的執行日志來确認 logrotate 的執行時間:/var/log/cron;

現在說說 logrotate 執行機制;
logrotate 的配置檔案會決定它的執行行為;主配置檔案為 /etc/logrotate.conf,可以把各個應用要切割的日志單獨儲存為一個配置檔案,并存放在 /etc/logrotate.d/ 目錄下,通過在主配置檔案增加下面一行内容來引入各個應用的獨立配置檔案;
include /etc/logrotate.d
下圖是 logrotate.conf:
假設現在要切割某個 nginx 服務的通路日志,建立 /etc/logrotate.d/www.nginx.conf,内容如下:
/www/nginx/logs/access.log {
su root root
daily
copytruncate
size +500M
dateext
compress
olddir /www/nginx/logs
notifempty
}
然後儲存即可,第二天以後就會定時執行這份配置的日志切割了。
那萬一配置有問題,總不能等一天出錯了才能發現吧,是以還需要提前檢查配置檔案的正确性,其實就是将自動執行改為手動執行即可,如果這次不想立即切割,加上 -d 選項即可:
sudo logrotate -d /etc/logrotate.d/www.nginx.conf