Python TimedRotatingFileHandler - 日志丢失

问题描述 投票:0回答:1

我正在 apache 环境中运行我的 python 应用程序并使用 timedRotatingFileHandler 来记录。 我已经以一种应该每天午夜轮换的方式设置了记录器。我的所有进程都写入同一个记录器文件。不知何故,记录器有时会丢失记录信息。有时我看到记录器同时写入两个文件(旧文件和旋转文件)。

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

请帮助我理解..

python
1个回答
9
投票

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

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

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

本质上,您将希望有一个单独的进程来侦听来自多个位置的日志记录事件,然后该进程会将事件记录到单个文件中。您也可以在该侦听器进程中配置轮换。

如果你不确定如何写这个,你可以尝试使用诸如 Sentry 或 Facebook 的 Scribe 之类的包。我推荐 Sentry,因为 Scribe 的设置并不简单。

© www.soinside.com 2019 - 2024. All rights reserved.