最近後端童鞋遇到一個小需求,拆分nginx生成的log文件,最好是按天生成,看着她還有不少bug待改的狀態,我說這個簡單啊,我來吧。曾經搞node後端的時候,這些東西都so easy的,我還記得當時用log4js,幾行配置文件就能搞定,如今就算是直接配置nginx應該也不會特別麻煩。node
先說一下項目的大概架構。整個項目採用docker部署,一共三個container,一個getaway負責整個服務的網絡轉發,而後就是一個backend和frontend的container。frontend跑在一個nginx鏡像中,對應的nginx.conf在frontend repo修改,咱們將要操做的也就是這個配置文件。nginx
經過Google,咱們可以很容易的找到相關的解決辦法,關鍵字搜索,"nginx generate log file by date",咱們可以很容易的找到解決方案:使用map定義一個時間結構,而且在access_log的配置名中加上這個結構,相似下面這樣,git
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'
不過吧,上面這種方式竟然不起做用,還致使nginx再也不記錄log文件。好吧,英文的不行,咱們看看中文的,關鍵字搜索,"nginx log文件按天生成", 搜出來一大堆內容差很少的blog,好比,web
內容大同小異,本身寫shell腳本去遷移日誌,或者就再加個crontab添加個定時任務的。這種本身寫腳本去遷移日誌的,就過重了,與我理想的幾行配置搞定的初衷不符。shell
進入到frontend container中,使用"chown"、"chgrp"把對應日誌文件目錄的用戶和用戶組改爲nginx。好的,接下來,重啓container,訪問對應服務,在日誌文件夾下面,咱們看到了新生成的帶日期的文件名的日誌文件!架構