一段时间以来,我一直在为多处理日志而苦苦挣扎,原因有很多。
我的一个原因是,为什么另一个 get_logger.
当然,我已经看到了这个问题,而且 multiprocessing.get_logger 返回的记录器似乎做了一些“进程共享锁”的魔法来使记录处理顺利进行。
所以,今天我查看了 Python 2.7 的多处理代码(/multiprocessing/util.py),发现这个 logger 只是一个普通的 logging.Logger,几乎没有任何魔法。
这是 Python 文档中的描述,就在 get_logger 函数之前:
提供了一些对日志记录的支持。但是请注意,日志包不使用进程共享锁,因此(取决于处理程序类型)来自不同进程的消息可能会混淆。
所以当你使用错误的日志处理程序时,即使是 get_logger 记录器也可能出错?我已经使用了一个程序使用 get_logger 进行日志记录一段时间。它将日志打印到 StreamHandler 并且(似乎)永远不会混淆。
现在我的理论是:
- multiprocessing.get_logger 根本不做进程共享锁
- StreamHandler 适用于多处理,但 FileHandler 不适用
- 这个 get_logger 记录器的主要目的是跟踪进程的生命周期,并提供一个易于获取和准备使用的记录器,该记录器已经记录了进程的名称/ID 类型的东西
这是问题:
我的理论对吗?
如何/为什么/何时使用这个 get_logger?