欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

以天为单位单独保存的 Nginx 配置日志

最编程 2024-06-03 13:03:00
...

服务器上nginx的日志体积日益增大,已经到了打开都要加载很久的地步了,无法忍受,想配置日志按天保存,方便查看。网上搜了一下,基本有两种思路:

脚本定时执行

主要思路是写一个定时任务脚本,每天特定时间把现在的日志重命名,XXXX2021-01-05.log,然后nginx -s reopen重启nginx来实现目的。
考虑了一下nginx重启会导致线上项目服务终止影响用户体验,所以放弃了。

nginx.conf配置

通过nginx.conf配置来实现自动化的按天保存日志,nginx无需重启,好处显而易见,我选择了这种方式实现。

配置方法:

server {
    ...
    if ($time_iso8601 ~ '(d{4}-d{2}-d{2})') {
        set $time $1;
    }
    access_log  /home/logs/access-$time.log ;
    error_log  /home/logs/error.log;
    ...
}

原理解析

$time_iso8601是nginx 内嵌变量,可以用来获取当前时间,时间格式如下:2018-09-21T16:01:02+02:00。然后使用正则表达式来获取所需时间的数据。按yyyy-mm-dd格式获取当前日期的字符串,通过变量$time来设置日志文件名,这样当日期改变时,日志文件名就会更新,nginx会以新的文件名记录日志,实现按天保存日志的效果。

注意事项

实现过程并不顺利,主要遇到了以下几个问题。
1.access_log可以通过变量配置文件名,但是error_log用同样的方法配置后不生效,不过error_log的记录相对较少,目前还不是问题,暂时放弃。
2.保证日志目录可被 nginx 用户组有读写权限,这个踩坑了,配置后日志目录下没有出现日志,nginx.conf里配置的用户名是nginx,改了权限之后就可以正常生成了。

推荐阅读