Nginx日志按天保存,网上有很多教程,都是通过脚本辅助,重命名文件实现。
其实Nginx自身有原生方法,可以通过配置实现。
首先配置access日志的格式:1
2
3log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
更改为1
2
3log_format main '$remote_addr - $remote_user [$time_iso8601] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
此处主要更改access
日志文件中日期格式,与日志按天保存没有关系,也可以不修改,只是为了更方便。
配置日志按天保存,在server
字段内配置,如下:1
2
3
4
5
6
7
8
9
10
11server {
···
if ($time_iso8601 ~ '(\d{4}-\d{2}-\d{2})') {
set $ymd $1;
}
access_log logs/80.access_$ymd.log main;
···
}
需要注意的是:保证日志目录可被nginx用户组有读写权限。
没有授权可以通过chown
授权。
然后重启nginx即可。
更详细的日期变量设置:1
2
3
4
5
6
7
8
9if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})")
{
set $year $1;
set $month $2;
set $day $3;
set $hour $4;
set $minutes $5;
set $seconds $6;
}
可以根据自身需求调整。