1. 程式人生 > >nginx日誌按天分割

nginx日誌按天分割

之前 address line 服務 周期 gzip ner num color

nginx日誌分為error日誌和access日誌,在nginx.conf中可以定義


現在有個問題是:nginx日誌會一直增長,並未按天切割,不僅不好查詢日誌,而且歷史日誌也不能歸檔

nginx本身沒有提供按天分割的方法,我們可以利用linux系統的logrotate工具實現(linux的/var/log/wtmp就是利用logrotate分割的)

vim /etc/nginx_rotate/wls/apache/servers/pacap/logs/*.log { daily copytruncate dateext dateformat .%Y-%m-%d missingok rotate 10
sharedscripts postrotate [ -f /wls/apache/servers/pacap/logs/nginx.pid ] && kill -USR1 `cat /wls/apache/servers/pacap/logs/nginx.pid` endscript}

如果想測試結果,使用-f參數執行:/usr/sbin/logrotate -f /etc/nginx_rotate

[root@SZB-L0031636 logs]# lltotal 126464-rw-r--r-- 1 wls81 wls 0 Sep 13 10:22 access.log
-rw-r--r-- 1 wls81 wls 127446272 Sep 13 10:22 access.log.2017-09-13-rw-r--r-- 1 wls81 wls 0 Sep 13 10:22 error.log-rw-r--r-- 1 wls81 wls 2040411 Sep 13 10:22 error.log.2017-09-13-rw-r--r-- 1 root root 5 Sep 11 09:18 nginx.pid


正式環境中,我們可以通過配置定時任務來處理(在每日23:50分切割就可以啦)

50 23 * * * /usr/sbin/logrotate -f /etc/nginx_rotate


logrotate的原理和具體配置大家可以查資料哈,這裏列出常用的配置參數以及說明:

其實最好的方法是 man logrotate啦:

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(或minsize) log-size 當日誌文件到達指定的大小時才轉儲,log-size能指定bytes(缺省)及KB (sizek)或MB(sizem).

當日誌文件 >= log-size 的時候就轉儲。 以下為合法格式:(其他格式的單位大小寫沒有試過)

size = 5 或 size 5 (>= 5 個字節就轉儲)

size = 100k 或 size 100k

size = 100M 或 size 100M


nginx日誌按天分割