nginx根据日期记录日志 (2017-03-23 10:38:20)转载▼ 标签: nginx 日志 根据日期记录日志 linux 分类: nginx 在ngixn.cnf中当前项目server模块中加入以下配置代码:
if ($time_iso8601 ~ "(d{4})-(d{2})-(d{2})") {
set $time $1$2$3;
}
access_log /usr/local/lnmp/nginx-1.10/logs/${server_name}/${time}.alog combined ;
说明:
if判断中进行正则匹配,匹配完成后根据小括号()将匹配成功的字符设置为$1,$2,$3等等,此次匹配的结果为年月日。
set $time $1$2$3这句户表示在配置文件中设置一个变量time,赋值为$1$2$3即年月日。
access_log /usr/local/lnmp/nginx-1.10/logs/{$server_name}/${time}.alog combined ;
本句的意思是开启log,并将日志写入/usr/local/lnmp/nginx-1.10/logs/{$server_name}/${time}.alog文件中,$server_name为当前server_name,$time为前文年月日,combined表示使用默认日志格式进行记录。
一、原生方法 log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; log_format main '$remote_addr - $remote_user [$time_iso8601] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; 将原来的time_local修改为time_iso8601,该格式日期为“2017-01-19T09:10:52+08:00”,也可以其他格式,看个人习惯 注意层次关系,这段脚本一定要加到server配置内部,且if要在access_log前面,否则set的变量将无法引用 server{ ... if ($time_iso8601 ~ '(d{4}-d{2}-d{2})') { set $tttt $1; } access_log logs/access-$tttt.log main; ... } 按yyyy-mm-dd格式截取字符串,写入指定日志文件中 执行 nginx -s reload 后则配置生效 二、命令支持,手动处理 首先mv access.log 想要的名字 然后nginx -s reopen 则再次创建access.log 这个方法不会造成日志丢失,虽然改名了,但进程打开的文件指针其实没变,reopen操作之前这段时间的日志还会继续写入改名后的文件里 reopen只是通知nginx重新打开这个文件