【问题标题】:Using RotatingFileHandler to log from multiple processes使用 RotatingFileHandler 从多个进程记录
【发布时间】:2023-03-19 03:27:01
【问题描述】:

我正在使用多处理模块将许多 I/O 作业拆分到不同的进程,我遇到了从不同进程记录到同一个日志文件的问题。 在寻找解决方案后,我将记录器中的文件集从普通 FileHandler 更改为 RotatingFileHandler。 在我的实验中(在开发环境中),它完美地工作并解决了问题,但我不确定它是否是一种可靠的方法。 有什么缺点吗?我应该注意什么?

【问题讨论】:

    标签: python python-multiprocessing python-logging


    【解决方案1】:

    不,不支持。来自pythonlogging cookbook

    虽然日志记录是线程安全的,并且从 支持单个进程中的多个线程,记录到单个进程中 不支持来自多个进程的文件,因为没有 跨多个序列化对单个文件的访问的标准方法 Python 中的进程。

    之后,说明书建议使用单个套接字服务器进程来处理日志以及向其发送日志消息的其他进程。 在Sending and Receiving logging events across a network 部分中有一个这种方法的工作示例。

    您可以制作一个 api 来接收您的日志并保存在一个文件中。或者你可以使用一个队列来存储你的日志,所有线程都将disered日志放入这个队列,然后一个单独的进程读取它的队列,把它写到一个文件中。

    【讨论】:

    • 感谢您的回答。我确实阅读了文档以及有关该主题的其他答案。关键是它以某种方式起作用,我想了解它为什么起作用以及可能发生什么。
    • 当您有两个进程同时访问同一个文件时,您的日志写入进程可能会崩溃。我的代码我使用一个队列来组织日志,所有进程都保存在它上面,我有另一个进程消耗队列数据并将其存储在一个文件中(并且只有这个进程写入这个文件)
    • 感谢您的建议。我一直在努力实施。我试图在这里创建一个有据可查的问题:stackoverflow.com/q/68207921/12560646。请随意查看。
    猜你喜欢
    • 2022-01-17
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多