gpt4 book ai didi

python - python 日志记录处理程序中 setLevel 的意义是什么?

转载 作者:行者123 更新时间:2023-12-02 03:07:27 28 4
gpt4 key购买 nike

假设我有以下代码:

import logging
import logging.handlers

a = logging.getLogger('myapp')
h = logging.handlers.RotatingFileHandler('foo.log')
h.setLevel(logging.DEBUG)
a.addHandler(h)

# The effective log level is still logging.WARN
print a.getEffectiveLevel()
a.debug('foo message')
a.warn('warning message')

我希望在处理程序上设置 logging.DEBUG 会导致调试级别消息写入日志文件。但是,这将打印 30 表示有效级别(等于默认值 logging.WARNING),并且仅将 warn 消息记录到日志文件,而不是调试消息。

看来处理程序的日志级别正在下降,例如它被默默地忽略了。这让我想知道,为什么处理程序上有 setLevel

最佳答案

它允许更精细的控制。默认情况下,根记录器具有 WARNING级别设置,这意味着它不会打印较低级别的消息(无论处理程序的级别如何设置!)。但是,如果您将根记录器的级别设置为 DEBUG ,消息确实被发送到日志文件:

import logging
import logging.handlers

a = logging.getLogger('myapp')
a.setLevel(logging.DEBUG) # set root's level
h = logging.handlers.RotatingFileHandler('foo.log')
h.setLevel(logging.DEBUG)
a.addHandler(h)
print a.getEffectiveLevel()
a.debug('foo message')
a.warn('warning message')

现在,想象一下您想要添加一个不记录调试信息的新处理程序。您可以通过简单地设置处理程序日志记录级别来完成此操作:

import logging
import logging.handlers

a = logging.getLogger('myapp')
a.setLevel(logging.DEBUG) # set root's level

h = logging.handlers.RotatingFileHandler('foo.log')
h.setLevel(logging.DEBUG)
a.addHandler(h)

h2 = logging.handlers.RotatingFileHandler('foo2.log')
h2.setLevel(logging.WARNING)
a.addHandler(h2)

print a.getEffectiveLevel()
a.debug('foo message')
a.warn('warning message')

现在,日志文件 foo.log将包含这两条消息,而文件 foo2.log仅包含警告消息。您可能对仅包含错误级别消息的日志文件感兴趣,然后只需添加 Handler并将其级别设置为 logging.ERROR ,一切都使用相同的 Logger .

您可能会想到Logger日志记录级别作为对给定记录器及其处理程序“感兴趣”的消息的全局限制。记录器考虑的消息随后被发送到处理程序,处理程序执行自己的过滤和日志记录过程。

关于python - python 日志记录处理程序中 setLevel 的意义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33396730/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com