我已经花了一段时间来解决多进程日志记录的问题,有很多原因。
其中之一就是为什么要使用另一个get_logger。
当然,我看过 这个问题 ,似乎multiprocessing.get_logger返回的记录器做了一些“进程共享锁”的魔法,使得日志处理变得平稳。
所以,今天我查看了Python 2.7的multiprocessing代码(/multiprocessing/util.py),发现这个记录器只是一个普通的logging.Logger,并且几乎没有任何魔法可言。
这是Python文档中get_logger函数前面的描述:
提供了一些日志记录支持。注意,logging包不使用进程共享锁,所以(根据处理程序类型)不同进程的消息可能会混合在一起。
所以,当您使用错误的日志记录处理程序时,即使是get_logger记录器也可能出错? 我已经使用了一个使用get_logger进行日志记录的程序很长时间了。 它将日志打印到StreamHandler中,看起来从未混淆过。
现在我的理论是:
- multiprocessing.get_logger不会执行进程共享锁
- StreamHandler适用于multiprocessing,但FileHandler不适用
- 此get_logger记录器的主要目的是跟踪进程的生命周期,并提供一个易于获取和准备好使用的记录器,已经记录了进程的名称/ID等信息
这里有个问题:
我的理论正确吗?
如何/为什么/何时使用这个get_logger?