我正在尝试找到一种跨类/子类/模块共享日志记录的最佳实践方法。以下类可以在同一个文件中,也可以分布在包/模块中。
例如
-- A.py
class A:
def __init__(self):
self.logger = logging.getLogger(someName)
-- B.py
class B(A):
...
-- C.py
class C(B):
def foo(self):
self.logger.info('Hello from C!')
现在在这种情况下,整个类层次结构共享同一个记录器实例,由基类设置。
这是一个好习惯吗?或者我应该在每个 .py 文件的顶部设置一个全局变量,例如:
logger = logging.getLogger(__name__)
第一种方法看起来更面向对象,并且避免在模块导入时做任何事情(仅在对象创建时),而第二种方法创建每个类都可以看到的不同记录器,其名称反映了它所在的模块。
第一种情况的另一个优点是我可以在单个实例上设置自定义日志记录选项,它将适用于所有类,而在第二种情况下,它仅在每个记录器名称扩展父/基记录器名称时才有效,例如记录.getLogger('ABC')。但是,这些类不必位于相同的包或包层次结构中,因此这可能并不总是有意义的。
最好的方法是什么?