在 Django 中,我到处都有记录器,目前使用硬编码的名称。
对于模块级日志记录(即,在 View 函数的模块中),我有这样做的冲动。
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
,这从把它放在每个类(class)的角度来看都会困扰我,并使我有 5 个字符接近 79 个适合的字符行.
你总是可以使用伪类装饰器:
>>> 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
关于python - 命名 Python 记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/401277/