日志输出

标准日志输出

OpenResty 的标准日志输出原句为 ngx.log(log_level, ...) ,几乎可以在任何 ngx_lua 阶段进行日志的输出。

worker_processes  1;
error_log  logs/error.log error;    # 日志级别
events {
    worker_connections  1024;
}

http {
    server {
        listen    80;
        location / {
            content_by_lua_block {
                local num = 55
                local str = "string"
                local obj
                ngx.log(ngx.ERR, "num:", num)
                ngx.log(ngx.INFO, " string:", str)
                print([[i am print]])
                ngx.log(ngx.ERR, " object:", obj)
            }
        }
    }
}

测试:

curl http://127.0.0.1/
#
# 2022/06/06 13:41:01 [error] 22325#22325: *2132 [lua] content_by_lua(default.conf:14):5: num:55, client: 127.0.0.1, server: 127.0.0.1, request: "GET / HTTP/1.1", host: "127.0.0.1"
# 2022/06/06 13:41:01 [error] 22325#22325: *2132 [lua] content_by_lua(default.conf:14):8:  object:nil, client: 127.0.0.1, server: 127.0.0.1, request: "GET / HTTP/1.1", host: "127.0.0.1" 

上面的例子,日志输出级别使用的 error,只有等于或大于这个级别的日志才会输出。

这里还有一个知识点就是 OpenResty 里面的 print 语句是 INFO 级别

日志级别

有关 Nginx 的日志级别,请看下表:

ngx.STDERR     -- 标准输出
ngx.EMERG      -- 紧急报错
ngx.ALERT      -- 报警
ngx.CRIT       -- 严重,系统故障,触发运维告警系统
ngx.ERR        -- 错误,业务不可恢复性错误
ngx.WARN       -- 告警,业务中可忽略错误
ngx.NOTICE     -- 提醒,业务比较重要信息
ngx.INFO       -- 信息,业务琐碎日志信息,包含不同情况判断等
ngx.DEBUG      -- 调试

以上常量,越往上等级越高。可以尝试将 nginx 错误日志级别修改为 info,然后重新执行一下测试用例,就可以看到全部日志输出结果了。

对于应用开发,一般使用 ngx.INFOngx.CRIT 就够了。生产中错误日志开启到 error 级别就够了。