可以通过 debug.getinfo 来获取上级调用栈的信息。像这样:
local function log_wrapper(...)
local pos_info = debug.getinfo(2)
ngx.log(ngx.ERR, pos_info.short_src, ":", pos_info.currentline,
": ", pos_info.name, ":", ...)
end
会输出类似这样的日志:
2017/07/02 20:30:23 [error] 6787#6787: *13 [lua] a.lua:3: log_wrapper(): ./src/a.lua:7:do_sth:
(第 7 行有一个名为 do_sth 的函数调用了 log_wrapper)
这里有个小瑕缺,输出日志前头会有固定的 a.lua:3: log_wrapper(): 占位符。
要是无法接受这一点,有两种方法解决:
1. 通过 ngx.errlog,在应用层截留日志,然后自己处理日志的输出细节。https://github.com/openresty/lua-resty-core/blob/master/lib/ngx/errlog.md
2. 自己写一个 Nginx C 模块,封装 Nginx 的日志入口,然后在 Lua 代码里调用它而不是 OpenResty 的 ngx.log