Nginx日志时间格式修改 Nginx日志访问日期修改
Nginx的默认访问日志的时间格式是:[08/Mar/2018:10:30:58 +0800],由日志参数中的$time_local变量表示。
但是这种格式其实很不方便我们国内用户的使用习惯,我们正常是使用格式:2018-06-08 10:11:23 因此我们需要改一下
有两种方法,一种是修改源码,然后编译,一种是外挂lua来实现,两个都简单介绍一下,我们建议用方法二,LUA方式来实现
一、修改nginx源代码
需要修改的文件
src/core/nginx_times.c
src/http/modules/ngx_http_log_module.c
首先修改ngx_http_log_module.c文件:
{ ngx_string("time_iso8601"), sizeof("1970-09-28T12:00:00+06:00") - 1,
更改后
{ ngx_string("time_iso8601"), sizeof("1970-09-28 12:00:00") - 1,
然后修改nginx_times.c文件:
[sizeof("1970-09-28T12:00:00+06:00")];
更改后
[sizeof("1970-09-28 12:00:00")];
ngx_cached_http_log_iso8601.len = sizeof("1970-09-28T12:00:00+06:00") - 1;
更改为
ngx_cached_http_log_iso8601.len = sizeof("1970-09-28 12:00:00") - 1;
(void) ngx_sprintf(p3, "%4d-%02d-%02dT%02d:%02d:%02d%c%02d:%02d", tm.ngx_tm_year, tm.ngx_tm_mon, tm.ngx_tm_mday, tm.ngx_tm_hour, tm.ngx_tm_min, tm.ngx_tm_sec, tp->gmtoff < 0 ? '-' : '+', ngx_abs(tp->gmtoff / 60), ngx_abs(tp->gmtoff % 60));
更改为
(void) ngx_sprintf(p3, "%4d-%02d-%02d %02d:%02d:%02d", tm.ngx_tm_year, tm.ngx_tm_mon, tm.ngx_tm_mday, tm.ngx_tm_hour, tm.ngx_tm_min, tm.ngx_tm_sec);
最后重新编译,并使用新的时间变量
将nginx配置文件中的$time_local改为$time_iso8601即可。
二、lua 方法
不修改nginx源代码的,这种可以避免动到源代码造成各种不可测的问题,我们建议选择这种方法,具体如下:
http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '"$remote_addr" "$fmt_localtime" "$request_id" "$requ '"$status" "$body_bytes_sent" "$request_length" "$htt '"$http_user_agent" "$http_x_forwarded_for" "$http_ho #access_log /data/log/nginx/access.log main; map $host $fmt_localtime { default ''; } log_by_lua_block { ngx.var.fmt_localtime = ngx.localtime(); } ... }
代码的解释如下:
首先我们自定义一个nginx 变量 $fmt_localtime,因为在http context不能够使用 set $variable。
所以我们采用map的方式如下
map $host $fmt_localtime { default '';
}
2) 然后我们用 log_by_lua_block 设置 ngx.fmt_localtime的时间
3) 设置日志格式 log_format使用$fmt_localtime作为时间参数
顶(0)
踩(4)
- 最新评论