在 Python 中使用多处理进行日志记录:一个强大的解决方案
当使用 Python 的多处理模块时,由于缺乏进程,日志记录变得更加复杂 -多处理感知记录器的共享锁,可能会导致 sys.stderr 输出混乱。
为了解决这一挑战,另一种方法是创建一个自定义日志处理程序,通过管道将输出定向到父进程。此方法依赖队列来处理并发并从错误中恢复。提供的实现可确保生产环境中的稳定日志记录。
自定义处理程序 MultiProcessingLog 扩展了logging.Handler 类并利用 RotatingFileHandler 来处理基于文件的日志记录。它在父进程和子进程之间建立管道,允许集中存储日志。
实现细节:
MultiProcessingLog 处理程序使用单独的线程来接收日志记录来自子进程并将它们转发到父进程中的 RotatingFileHandler。这可确保日志消息的格式正确并写入预期目的地。
要发送日志记录,请使用 send 方法,而接收线程会持续监视管道中的新记录并将其转发到 _handler。
为了最大限度地降低不可拾取的对象导致问题的风险,处理程序在通过管道发送日志记录之前将 exc_info 和 args 值字符串化。
emit 方法被重写以包装 _format_record 调用
这个自定义日志处理程序为管理多处理应用程序中的日志提供了可靠的解决方案,提供集中式日志存储和错误恢复功能。
以上是如何在 Python 多处理应用程序中实现稳健的日志记录?的详细内容。更多信息请关注PHP中文网其他相关文章!