Openresty自定义JSON访问日志

我想在每个请求中将JSON字符串写入访问日志中,这样以后消费它会更容易。

我正在使用Lapis/Openresty提供的print(),但我想覆盖时间戳、日志级别和其他信息,这些信息是nginx日志格式的一部分。

我该怎么覆盖它?

点赞
用户2278997
用户2278997

为了将访问日志填充到 json 中,您可以在 nginx.conf 中使用类似以下的方式:

log_format mydef "$json_log";
access_log logs/access.log mydef;
server {
    ...
    set $json_log '';
    log_by_lua_block {
        local json = require "cjson"
        ngx.var.json_log = json.encode({my_json_data = 1})
    }
}

如果您想要在 nginx 错误日志中删除默认的前缀,由于格式被硬编码在 nginx 的源代码中,这是不可能的。

但是,在 log_by_lua 上下文中,您可以以自定义格式向消费者提供数据。

2016-10-31 06:50:09