python - 命名 Python 记录器

标签 python django logging

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

相关文章:

python - 在 selenium webdriver python 中选择页面文本

python - 类 : cannot use self inside the decorated function 中的装饰器

python - 如何使用 Kivy 获取 textinput 的值

node.js - 我想在日志语句中显示文件名

python - 将数百列和列索引连接成一个字符串

Django:将管理员注销重定向到 allauth 登录

python - createsuperuser 没有要求用户名

python - Django 集成开发环境 : how to start the devserver in an editor?

python - 使用 Python 的 unittest 模块作为测试运行器时,如何在测试前运行初始化代码?

python - Cassandra cqlengine 增加日志记录的详细程度