gpt4 book ai didi

python - python 日志记录处理程序中 setLevel 的意义何在?

转载 作者:IT老高 更新时间:2023-10-28 20:34:17 24 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 日志记录级别视为对给定记录器及其处理程序哪些消息“感兴趣”的全局限制。记录器随后考虑的消息被发送到处理程序,这些处理程序执行自己的过滤和记录过程。

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

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