Lua日志记录库和打开文件限制

我正在使用lua-log进行一些日志记录。它本身是一份不错的代码,但在我的情况下,我必须通过nginx调用lua脚本。我在代码中创建记录接口:

local log = require 'log'.new(
  'trace',
    require 'log.writer.list'.new(                    -- 多个写入器:
    require 'log.writer.file.roll'.new(               -- * 滚动文件
      LOG_FILE_PATH,
      LOG_FILE_NAME,
      5,                                              -- 记录文件数
      4096*4096*4096                                  -- 最大文件大小(以字节为单位)
    )
  ), require 'log.formatter.concat'.new()
)

稍后需要时调用日志函数记录任何内容。我开始遇到的问题是,因为我正在调用大量脚本实例,所以我达到了打开文件的限制。目前,我通过添加此条目“worker_rlimit_nofile 30000;”来调整nginx,但我不确定这是否是最终解决方案。

我想做的是:仅在需要时写入日志文件,但文件不应在脚本启动时创建。我该怎么做,或者是否有任何其他很好的用于lua的日志记录?目前我记录到文件中,但最终我将使用日志记录到syslog或sql。

点赞
用户2328287
用户2328287

你可以直接使用 log.file.writer 并设置 close_file=true 选项。(查看 file.roll 的实现)。但是在线程/进程访问日志文件之间没有同步。当执行写入操作时,日志文件大小会增加,例如 size=size+#data,你可能会得到比预期更大的文件大小。为了处理多线程应用程序,我使用 ZeroMQ writers。你可以将写入器运行到单独的进程/线程中,并使用inproc/ipc来发送消息。此外,你也可以使用UDP协议代替ZeroMQ。

2015-01-31 04:25:50