gpt4 book ai didi

python - 禁用根记录器的输出

转载 作者:太空狗 更新时间:2023-10-29 20:56:12 24 4
gpt4 key购买 nike

我在名为“logger.py”的文件中有以下代码

import logging

format = '%(asctime)s - %(name)-30s - %(levelname)-8s - %(message)s'
logging.basicConfig(level=logging.DEBUG,
format=format)

formatter = logging.Formatter(format)

fh = logging.FileHandler('test.log')
fh.setFormatter(formatter)
fh.setLevel(logging.DEBUG)

ch = logging.StreamHandler()
ch.setFormatter(formatter)
ch.setLevel(logging.INFO)

logging.getLogger().addHandler(fh)
logging.getLogger().addHandler(ch)

在另一个文件中

import logging
import logger

logger = logging.getLogger(__name__)
logger.info('Staring Scheduler')

我得到以下控制台输出

2014-07-14 22:27:10,915 - __main__                       - INFO     - Staring Scheduler
2014-07-14 22:27:10,915 - __main__ - INFO - Staring Scheduler

我无法禁用双输出。我想使用额外的流处理程序来自定义打印到控制台的日志级别。将来我还想使用 RotatingFileHandler 而不是简单的文件处理程序。

有人知道如何在保持第二个文件中的简单记录器设置的同时实现这一目标吗?我进行了搜索,但似乎没有解决方案。

更新 1(已解决)

文件 logger.py

import logging

logging.getLogger().setLevel(logging.DEBUG)

formatter = logging.Formatter('%(asctime)s - %(name)-30s - %(levelname)-8s - %(message)s')

fh = logging.FileHandler('test.log')
fh.setFormatter(formatter)
fh.setLevel(logging.DEBUG)

ch = logging.StreamHandler()
ch.setFormatter(formatter)
ch.setLevel(logging.ERROR)

logging.getLogger().addHandler(fh)
logging.getLogger().addHandler(ch)

文件test.py

import logging
import logger

logger = logging.getLogger(__name__)
logger.debug('Debug message')
logger.info('Info message')
logger.warning('Warning message')
logger.error('Error message')
logger.critical('Critical message')

控制台输出:

2014-07-15 09:47:58,171 - __main__                       - ERROR    - Error message
2014-07-15 09:47:58,171 - __main__ - CRITICAL - Critical message

Test.log内容:

2014-07-15 09:47:58,171 - __main__                       - DEBUG    - Debug message
2014-07-15 09:47:58,171 - __main__ - INFO - Info message
2014-07-15 09:47:58,171 - __main__ - WARNING - Warning message
2014-07-15 09:47:58,171 - __main__ - ERROR - Error message
2014-07-15 09:47:58,171 - __main__ - CRITICAL - Critical message

最佳答案

您看到双重输出的原因是因为您在第一个文件中设置了两个 StreamHandler;记录器.py

这一行中明确的一个:

ch = logging.StreamHandler()

这一行中的另一个:

logging.basicConfig(level=logging.DEBUG,

根据 logging.basicConfig 的文档:

Does basic configuration for the logging system by creating a StreamHandler with a default Formatter and adding it to the root logger.

所以你应该删除 basicConfig 行。

然而,在您删除它之后,您需要将根记录器的级别设置为 DEBUG,因为您是在 basicConfig 行中执行此操作的:

logging.getLogger().setLevel(logging.DEBUG)

关于python - 禁用根记录器的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24750523/

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