Lua记录库和打开文件限制

时间:2015-01-30 20:15:58

标签: logging nginx lua

我正在使用lua-log进行某些日志记录。它本身就是一段很好的代码,但在我的事业中,我必须通过nginx调用lua脚本。我的代码我用

创建日志界面
local log = require 'log'.new(
  'trace',
    require 'log.writer.list'.new(                    -- multi writers:
    require 'log.writer.file.roll'.new(               -- * roll files
      LOG_FILE_PATH,
      LOG_FILE_NAME,
      5,                                              -- count files
      4096*4096*4096                                  -- max file size in bytes
    )
  ), require 'log.formatter.concat'.new()
)

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

我想要做的是只在需要时写入日志文件,但不应在脚本开头创建该文件。我怎么能这样做或者是否有任何其他良好的日志记录可用于lua?目前我登录到文件,但最终我将使用log to syslog或sql。

1 个答案:

答案 0 :(得分:1)

您可以直接使用log.file.writer并设置close_file=true选项。 (结帐file.roll实施)。 但是线程/进程之间没有同步来访问日志文件。当写入操作执行为size=size+#data时,日志文件的大小也会计入到卷展栏计数,并且您可以获得比预期更大的文件大小。

要使用多线程应用程序,我使用ZeroMQ编写器。 您可以在单独的进程/线程中运行writer to file,并使用inproc / ipc发送消息。您也可以使用UDP协议而不是ZeroMQ。