最近后端童鞋遇到一个小需求,拆分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,访问对应服务,在日志文件夹下面,咱们看到了新生成的带日期的文件名的日志文件!架构