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

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

0x01

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

0x02

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

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

nginx.confgithub

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,好比,web

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

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

0x04

怎麼辦呢,我這麼不喜歡麻煩的人,那咱們仍是回到上一個解決辦法再瞧瞧吧。如今來想想,爲何咱們像0x02那樣的解決辦法不行,會致使整個nginx沒有記錄log了呢?container運行正常,服務可以正常訪問,但就是沒有記錄日誌,能夠排除nginx.conf配置語法錯誤,由於語法錯誤會致使nginx啓動不了,也就是nginx運行正常,那些沒有日誌的產生,是否是沒有"write"的權限呢?下面咱們要作的就是後端

docker exec -it frontendContainerId sh網絡

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

如想了解更多,請移步個人博客

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

相關文章
相關標籤/搜索