在Django中,我到处都有记录器,目前都使用硬编码名称。
对于模块级日志记录(即,在视图功能模块中),我很想这样做。
log = logging.getLogger(__name__)
对于类级别的日志记录(即,在类__init__方法中),我很想这样做。
self.log = logging.getLogger("%s.%s" % ( self.__module__, self.__class__.__name__))
在解决数十起有关的问题之前,我正在寻找第二意见getLogger(“hard.coded.name”)。
这样行吗?还有其他人以相同的,难以想象的方式命名他们的记录器吗?
此外,是否应该分解并为该日志定义编写一个类装饰器?
我通常不使用或不需要类级记录器,但我最多只能将模块放在几个类中。一个简单的:
import logging LOG = logging.getLogger(__name__)
在模块顶部和后续模块中:
LOG.info('Spam and eggs are tasty!')
从文件中的任何位置通常可以将我带到想要的位置。这样就避免了对self.log整个地方的需求,从每个类的角度来看,这往往使我感到困扰,并使我5个字符更接近适合的79个字符行。
self.log
你可以始终使用伪类装饰器:
>>> import logging >>> class Foo(object): ... def __init__(self): ... self.log.info('Meh') ... >>> def logged_class(cls): ... cls.log = logging.getLogger('{0}.{1}'.format(__name__, cls.__name__)) ... >>> logged_class(Foo) >>> logging.basicConfig(level=logging.DEBUG) >>> f = Foo() INFO:__main__.Foo:Meh