gpt4 book ai didi

python - 使用 Python 日志记录管理记录器

转载 作者:太空宇宙 更新时间:2023-11-03 15:27:53 25 4
gpt4 key购买 nike

我正在编写一个服务器应用程序,它应该能够在控制台和日志文件上记录不同级别的日志。

问题是,如果设置了 logging.basicConfig(),它将记录到控制台,但必须在主线程中设置。

也可以通过 logging.basicConfig(filename='logger.log') 设置写入文件。

为控制台日志记录 (logging.StreamHandler()) 或文件日志记录 (logging.FileHandler()) 设置句柄补充了 logging.baseconfig() 选项集。

问题是,设置不是独立的。我的意思是,logging.baseConfig() 的日志级别必须包含Handler 级别,否则不会被记录。

因此,如果我将 baseConfig 设置为记录到文件,并将 StreamHandler 设置为记录到控制台,则文件日志级别必须低于控制台级别。(此外,basicConfig 选项记录所有其他日志。)

我尝试创建两个句柄,一个用于控制台,一个用于日志文件,它们可以工作,但是 basicConfig() 指定的任何日志类型仍将显示重复消息。

有没有办法禁用 basicConfig() 的输出?或者任何其他方式来实现这些选项?

谢谢。

最佳答案

您没有在问题中准确说明您希望控制台和文件日志记录的级别。但是,您不需要调用 basicConfig(),因为它只是一个方便的函数。你可以这样做(代码只是输入,未经测试):

import logging

logger = logging.getLogger(__name__)
configured = False

def configure_logging():
global configured
if not configured:
logger.setLevel(logging.DEBUG) # or whatever
console = logging.StreamHandler()
file = logging.FileHandler('/path/to/file')
#set a level on the handlers if you want;
#if you do, they will only output events that are >= that level
logger.addHandler(console)
logger.addHandler(file)
configured = True

事件首先传递给记录器,如果要处理事件(由于比较记录器和事件的级别),则将事件传递给记录器的每个处理程序及其所有祖先的处理程序作为出色地。如果在处理程序上设置了级别,则该处理程序可能会删除该事件,否则它将输出该事件。

关于python - 使用 Python 日志记录管理记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4136129/

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