快捷搜索:   服务器  PHP  安全  IIS  linux 安全

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)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论