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: 解决问题就是这么简单流畅,如风少年~

相关文章
相关标签/搜索