大部分情况
Nginx日志切分,需要脚本定时任务去切分,每个主机均需要增加一个crontab定时任务,并且定时任务切分会受系统账户密码过期影响日志切分。
解决痛点:
1、 减少crontab定时任务的维护。
2、 减少因系统账号过期导致的日志未切分
处理思路:
如何从nginx本身或结合自身参数实现日志动态切分,且不需要借助外围工具如:logrotate等工具。
考虑nginx自身时间相关参数:
$time_iso8601 生成格式:2021-09-25T15:16:35+08:00
$time_local 生成格式: 25/Sep/2021:15:12:13 +0800
具体配置:
Nginx配置文件server层
map $time_iso8601 $ydsc {
default 'date-not-found';
'~^(?<ymd>\d{4}-\d{2}-\d{2})' $ymd;
}
可以获得一个时间变量ydsc
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log logs/access_$ydsc main;
结果验证:
生成了按日期切分的文件。如下截图:(说明,只有请求后才会生成,reload时不会直接生成日期文件)