当前位置: 首页 > 面试题库 >

命名Python记录器

令狐灿
2023-03-14
问题内容

在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个字符行。

你可以始终使用伪类装饰器:

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


 类似资料:
  • 问题内容: 我正在编写一个服务器应用程序,该应用程序应该能够在控制台和日志文件上以不同级别登录。 问题是,如果设置了logging.basicConfig(),它将登录到控制台,但是必须在主线程中进行设置。 也可以使用logging.basicConfig(filename =’logger.log’)进行设置以写入文件。 设置用于控制台日志记录(logging.StreamHandler())或

  • 问题内容: 我正在尝试使用Python重命名目录中的某些文件。 假设我有一个名为的文件,并且想要删除,所以我得到的文件名将是 我正在尝试使用,但无法正常工作。我也考虑过使用字符串操作,但也没有成功。 问题答案: 使用重命名或移动文件或目录。

  • # 查看已下载的Docker镜像latest具体版本 # docker image inspect redis:latest|grep -i version docker image inspect 镜像名:latest|grep -i version # 容器日志过大处理 # Docker 的日志文件存在 /var/lib/docker/containers 目录中,通过下面的命令可以将日志文

  • 我正在使用log4j在我的一个应用程序上做一些日志记录。我的配置文件中的日志记录程序如下所示。 基本上,我希望从我写的代码中获得“信息”级别的消息,但是我希望外部库只在有警告或更可怕的情况下记录。 这正如我所期望的那样工作,但是在“org.eclipse.jetty”下有很多类 有可能这样做吗? 也就是说,我希望整个包中的所有内容都只警告/错误/致命。 我试了上述方法,但没有效果。是否有一个“通配

  • 通过@HystrixCommand注释,可以配置一个回退方法,在方法失败的情况下运行该方法。