NGINX按天生成日志文件的簡易配置


NGINX按天生成日志文件的簡易配置

0x01

最近后端童鞋遇到一個小需求,拆分nginx生成的log文件,最好是按天生成,看着她還有很多bug待改的狀態,我說這個簡單啊,我來吧。曾經搞node后端的時候,這些東西都so easy的,我還記得當時用log4js,幾行配置文件就能搞定,現在就算是直接配置nginx應該也不會特別麻煩。

0x02

先說一下項目的大概架構。整個項目采用docker部署,一共三個container,一個getaway負責整個服務的網絡轉發,然后就是一個backend和frontend的container。frontend跑在一個nginx鏡像中,對應的nginx.conf在frontend repo修改,我們將要操作的也就是這個配置文件。

通過Google,我們能夠很容易的找到相關的解決辦法,關鍵字搜索,"nginx generate log file by date",我們能夠很容易的找到解決方案:使用map定義一個時間結構,並且在access_log的配置名中加上這個結構,類似下面這樣,

nginx.conf

1 map $time_iso8601 $logdate {
2  '~^(?\d{4}-\d{2}-\d{2})' $ymd; default 'nodate'; 
3 }
4 
5 accesslog '/var/log/nginx/access${logdate}.log'

0x03

不過吧,上面這種方式居然不起作用,還導致nginx不再記錄log文件。好吧,英文的不行,我們看看中文的,關鍵字搜索,"nginx log文件按天生成", 搜出來一大堆內容差不多的blog,比如,

"nginx日志按天生成&定期刪除日志"、"Nginx按天分割輪詢日志文件"、"nginx日志access.log error.log按天生成存儲,定時刪除日志"。

內容大同小異,自己寫shell腳本去遷移日志,或者就再加個crontab添加個定時任務的。這種自己寫腳本去遷移日志的,就太重了,與我理想的幾行配置搞定的初衷不符。

0x04

怎么辦呢,我這么不喜歡麻煩的人,那我們還是回到上一個解決辦法再瞧瞧吧。現在來想一想,為什么我們像0x02那樣的解決辦法不行,會導致整個nginx沒有記錄log了呢?container運行正常,服務能夠正常訪問,但就是沒有記錄日志,可以排除nginx.conf配置語法錯誤,因為語法錯誤會導致nginx啟動不了,也就是nginx運行正常,那些沒有日志的產生,是不是沒有"write"的權限呢?下面我們要做的就是

docker exec -it frontendContainerId sh

進入到frontend container中,使用"chown"、"chgrp"把對應日志文件目錄的用戶和用戶組改成nginx。好的,接下來,重啟container,訪問對應服務,在日志文件夾下面,我們看到了新生成的帶日期的文件名的日志文件!

如想了解更多,請移步我的博客

ps: 解決問題就是這么簡單流暢,如風少年~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM