最近在公司实现日志功能。利用原生的Lua写法就是
ngx.log(ngx.ERR, msg)
但是这个方法只是简单地把日志都集中在配置文件指定的地方,没有自动维护日志的一个机制。所以我采用了rsyslog,它默认是使用的syslog作为系统的日志工具。关于它我就不过多介绍了,总之我用起来挺方便,上手也容易。
一开始我向rsyslog发送日志的方式是使用lua-resty-logger-socket这个第三方库。这个库虽然使用方便,但是通过源码发现该库只是将日志信息以消息的形式发送到rsyslog的服务器上(发送消息的代码如下),其中并不带有日志级别信息,所以一开始我无论怎么写rsyslog的配置文件都无法正确将日志文件分类。
local function _do_flush()
local ok, err, sock, bytes
local packet = send_buffer
sock, err = _connect()
if not sock then
return nil, err
end
bytes, err = sock:send(packet)
if not bytes then
-- "sock:send" always closes current connection on error
return nil, err
end
if debug then
ngx.update_time()
ngx_log(DEBUG, ngx.now(), ":log flush:" .. bytes .. ":" .. packet)
end
if (sock_type ~= 'udp') then
ok, err