繁体   English   中英

Python TimedRotatingFileHandler - 缺少日志

[英]Python TimedRotatingFileHandler - logs are missing

我在apache环境中运行我的python应用程序并使用timedRotatingFileHandler进行记录。 我设置记录器的方式应该是每天午夜轮换。 我的所有进程都写入同一个记录器文件。 某种程度上记录器有时会记录日志信息。 有时我会看到记录器同时写入两个文件(旧文件和旋转文件)。

我无法理解为什么会这样? TimedrotatingFileHandler不能在多进程环境中工作吗? 如果不是为什么会这样?

请帮我理解..

您不能天真地从多个进程记录(和旋转)到同一文件,因为操作系统不知道如何序列化来自2个不同进程的写入和旋转指令。 您遇到的情况称为竞争条件,因为2个进程正在竞争写入同一文件并关闭它并在旋转时同时使用新文件句柄打开。 旋转时,只有1个进程将赢得新的文件句柄,这样可以解释丢失的日志事件。

这是Python文档中的一个配方,提供了有关如何登录到同一位置的提示。

http://docs.python.org/howto/logging-cookbook.html#logging-to-a-single-file-from-multiple-processes

基本上,您需要一个单独的进程监听来自多个位置的日志记录事件,然后该进程将事件记录到单个文件中。 您也可以在该侦听器进程中配置旋转。

如果你不确定如何写这个,你可以尝试使用像Sentry或Facebook的Scribe这样的软件包。 我推荐Sentry,因为Scribe并不容易设置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM