我在apache环境中运行我的python应用程序并使用timedRotatingFileHandler进行记录。 我设置记录器的方式应该是每天午夜轮换。我的所有进程都写入同一个记录器文件。某种程度上记录器有时会记录日志信息。有时我会看到记录器同时写入两个文件(旧文件和旋转文件)。
我无法理解为什么会这样? TimedrotatingFileHandler不能在多进程环境中工作吗?如果不是为什么会这样?
请帮助我理解..
答案 0 :(得分:6)
您不能天真地从多个进程记录(和旋转)到同一个文件,因为操作系统不知道如何序列化来自2个不同进程的写入和旋转指令。您遇到的情况称为竞争条件,因为2个进程正在竞争写入同一文件并关闭它并在旋转时同时使用新文件句柄打开。旋转时,只有一个进程会赢得一个新的文件句柄,这样就可以解释丢失的日志事件。
这是Python文档中的一个配方,提示如何登录到同一个地方。
http://docs.python.org/howto/logging-cookbook.html#logging-to-a-single-file-from-multiple-processes
基本上,您需要让一个单独的进程侦听来自多个位置的日志记录事件,然后该进程会将事件记录到单个文件中。您也可以在该侦听器进程中配置旋转。
如果您不确定如何编写此内容,可以尝试使用Sentry或Facebook Scribe等软件包。我推荐Sentry,因为Scribe并不容易设置。