Openresty修改日志access.log中的时间格式

在OpenResty的access.log中,默认的时间格式是[13/Dec/2019:13:42:53 +0800],对于这种时间格式,不便于识别。所以打算修改成[2019-12-13 13:42:53]这种便于识别的格式

方法有两种,一种是修改源码,然后重新编译,现在不考虑。另一种是新增一个日期函数。

  1. 在http模块下新增一个日期函数

    1
    2
    3
    log_by_lua_block {
    ngx.var.fmt_localtime = ngx.localtime();
    }
  2. 配置日期函数

    1
    2
    3
    map $host $fmt_localtime {
    default '';
    }
  3. 使用该函数

    1
    2
    log_format  main  '$remote_addr[$http_x_forwarded_for] [$fmt_localtime] "$http_host" "$content_type" "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';
    access_log logs/access.log main;

完整代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
http {
include mime.types;
default_type text/html;

# $remote_addr 真实IP
# $http_x_forwarded_for 代理服务器的IP,如果不为空就是使用了代理
# $http_host = $host:$port
# $time_local = [19/Dec/2019:11:32:01 +0800] 格式不好辨认,使用自定义函数$fmt_localtime
log_format main '$remote_addr[$http_x_forwarded_for] [$fmt_localtime] "$http_host" "$content_type" "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';
access_log logs/access.log main;

# 定义自定义日期函数
map $host $fmt_localtime {
default '';
}
# 实现自定义日期函数
log_by_lua_block {
ngx.var.fmt_localtime = ngx.localtime();
}

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;

gzip on;
gzip_min_length 10k;
gzip_comp_level 6;
gzip_vary on;
gzip_types text/plain text/css application/javascript application/json application/xml text/xml image/png image/gif image/jpeg;

include ../conf.d/*.conf;
}

JouyPub wechat
欢迎订阅「K叔区块链」 - 专注于区块链技术学习