当前位置:  开发笔记 > 编程语言 > 正文

命名Python记录器

如何解决《命名Python记录器》经验,为你挑选了1个好方法。

在Django,我到处都有记录器,目前有硬编码的名字.

对于模块级日志记录(即,在视图函数模块中),我有这样做的冲动.

log = logging.getLogger(__name__)

对于类级别的日志记录(即,在类__init__方法中),我有这样做的冲动.

self.log = logging.getLogger("%s.%s" % (
    self.__module__, self.__class__.__name__))

在我解决几十次事件之前,我正在寻找第二意见getLogger("hard.coded.name").

这会有用吗?还有其他人用同样缺乏想象力的方式命名他们的记录器吗?

此外,我应该分解并为此日志定义编写类装饰器吗?



1> cdleary..:

我通常不使用或不需要类级别的记录器,但我最多只保留几个类.一个简单的:

import logging
LOG = logging.getLogger(__name__)

在模块的顶部和随后的:

LOG.info('Spam and eggs are tasty!')

从文件中的任何位置通常会让我到达我想要的位置.这避免了对self.log所有地方的需求,这往往会让我从每个班级的角度来看都会让我感到困扰,并使我更接近于符合79个字符的5个字符.

你总是可以使用伪类装饰器:

>>> 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


有趣的方法......我想我用Java花了太长时间.模块级日志记录可能正是医生所要求的.
使用`__name__`有一个问题:当使用相对导入在某处导入模块时,它的消息将使用较短的`__name__`转到日志.只要你避免这些相对导入,这不是问题,无论如何都是坏的风格(如python常见问题解答中所述)
推荐阅读
小白也坚强_177
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有