ngixn + lua + rsyslog实现日志功能

本文介绍了如何结合nginx、lua和rsyslog来实现日志功能,通过lua-resty-logger-socket库发送日志到rsyslog服务器,但由于缺乏日志级别信息,无法正确分类。最终解决方案是利用nginx内置的日志功能,结合rsyslog的配置,根据日志级别和设施进行日志的分类和存储。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在公司实现日志功能。利用原生的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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值