将日志语句放在模块级别与类级别中有什么区别吗?

时间:2014-06-10 10:19:38

标签: python logging

module1.py

#!/usr/bin/env python
import logging
LOGGER = logging.getLogger(__main__)
class MyClass()
    def __init__(self):
        LOGGER.info('test')

Versus

module2.py

#!/usr/bin/env python
import logging
class MyClass()
    def __init__(self):
        self.LOGGER = logging.getLogger(__main__)
        self.LOGGER.info('test')

在我看来,就像module2.py在其他模块导入时会产生一些不可预测的结果。 我不确定。

1 个答案:

答案 0 :(得分:1)

logging.getLogger()返回一个单例(每个给定的名字);将其存储为模块全局或实例属性没有区别。在这两种情况下,您的代码都引用了相同的对象。

引用documentation

  

对具有相同名称的getLogger()的多次调用将始终返回对同一Logger对象的引用。

来自logging.getLogger() function本身:

  

对具有给定名称的此函数的所有调用都返回相同的记录器实例。这意味着记录器实例永远不需要在应用程序的不同部分之间传递。