Nginx 配置日志以天為單位分開保存

服務(wù)器上nginx的日志體積日益增大,已經(jīng)到了打開都要加載很久的地步了,無法忍受,想配置日志按天保存,方便查看。網(wǎng)上搜了一下,基本有兩種思路:

腳本定時(shí)執(zhí)行

主要思路是寫一個(gè)定時(shí)任務(wù)腳本,每天特定時(shí)間把現(xiàn)在的日志重命名,XXXX2021-01-05.log,然后nginx -s reopen重啟nginx來實(shí)現(xiàn)目的。
考慮了一下nginx重啟會(huì)導(dǎo)致線上項(xiàng)目服務(wù)終止影響用戶體驗(yàn),所以放棄了。

nginx.conf配置

通過nginx.conf配置來實(shí)現(xiàn)自動(dòng)化的按天保存日志,nginx無需重啟,好處顯而易見,我選擇了這種方式實(shí)現(xiàn)。

配置方法:

server {
    ...
    if ($time_iso8601 ~ '(d{4}-d{2}-d{2})') {
        set $time $1;
    }
    access_log  /home/logs/access-$time.log ;
    error_log  /home/logs/error.log;
    ...
}

原理解析

$time_iso8601是nginx 內(nèi)嵌變量,可以用來獲取當(dāng)前時(shí)間,時(shí)間格式如下:2018-09-21T16:01:02+02:00。然后使用正則表達(dá)式來獲取所需時(shí)間的數(shù)據(jù)。按yyyy-mm-dd格式獲取當(dāng)前日期的字符串,通過變量$time來設(shè)置日志文件名,這樣當(dāng)日期改變時(shí),日志文件名就會(huì)更新,nginx會(huì)以新的文件名記錄日志,實(shí)現(xiàn)按天保存日志的效果。

注意事項(xiàng)

實(shí)現(xiàn)過程并不順利,主要遇到了以下幾個(gè)問題。
1.access_log可以通過變量配置文件名,但是error_log用同樣的方法配置后不生效,不過error_log的記錄相對(duì)較少,目前還不是問題,暫時(shí)放棄。
2.保證日志目錄可被 nginx 用戶組有讀寫權(quán)限,這個(gè)踩坑了,配置后日志目錄下沒有出現(xiàn)日志,nginx.conf里配置的用戶名是nginx,改了權(quán)限之后就可以正常生成了。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容