Python跨子类共享日志记录
我试图找到一种跨类/子类/模块共享日志的最佳实践方法。以下类可以在同一个文件中,也可以分布在不同的包/模块中 例如 现在在本例中,整个类层次结构共享由基类设置的同一个记录器实例 这是个好习惯吗?或者我应该在每个.py文件的顶部设置一个全局变量,如:Python跨子类共享日志记录,python,logging,python-logging,Python,Logging,Python Logging,我试图找到一种跨类/子类/模块共享日志的最佳实践方法。以下类可以在同一个文件中,也可以分布在不同的包/模块中 例如 现在在本例中,整个类层次结构共享由基类设置的同一个记录器实例 这是个好习惯吗?或者我应该在每个.py文件的顶部设置一个全局变量,如: logger = logging.getLogger(__name__) 第一种方法看起来更面向对象,避免在模块导入上做任何事情(仅创建一个对象),而第二种方法创建一个不同的记录器,每个类都可以看到它,其名称反映了它所在的模块 第一种情况的另一个优
logger = logging.getLogger(__name__)
第一种方法看起来更面向对象,避免在模块导入上做任何事情(仅创建一个对象),而第二种方法创建一个不同的记录器,每个类都可以看到它,其名称反映了它所在的模块
第一种情况的另一个优点是,我可以在单个实例上设置自定义日志选项,因为它可以跨所有类工作,而在第二种情况下,只有当每个记录器名称扩展父/基记录器名称时,它才能工作,例如logging.getLogger('A.B.C')。但是,这些类不必位于同一个包或包层次结构中,因此可能并不总是有意义的
最好的方法是什么?这是非常主观的,但我以前采用的方法是在
公用程序
或UTIL
模块中配置日志
设置,这些设置可以由不同的文件导入。每个文件都将实例化它们自己的记录器
。我认为总是执行logger=logging.getLogger(\uuuu name\uuuuu)
是一种很好的做法,因为它确实有助于调试
例如:
-- commons.py
logging.setLevel('INFO')
-- A.py
from commons import logging
logger = logging.getLogger(__name__)
class A:
def __init__(self):
logger.info("init")
def foo(self):
logger.info("foo")
在本例中,好处是您有一个配置的中心位置,而不是将日志分散到任何地方。唯一的缺点是每次都要实例化一个新的记录器。如果您想要更好的实践,我发现它非常容易使用。不确定它是否有用,但希望它会有用。
-- commons.py
logging.setLevel('INFO')
-- A.py
from commons import logging
logger = logging.getLogger(__name__)
class A:
def __init__(self):
logger.info("init")
def foo(self):
logger.info("foo")