gpt4 book ai didi

Python 记录器格式不格式化字符串

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

mylogger.py的内容如下:

def get_logger(name='my_super_logger'):
log = logging.getLogger(name)
log.setLevel(logging.DEBUG)
formatter = logging.Formatter(fmt='%(asctime)s %(name)s %(message)s',
datefmt='%m/%d/%Y %I:%M:%S %p')
if not len(log.handlers):
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
ch.setFormatter(formatter)
log.addHandler(ch)
# print(id(log))
return log

下面是myscript.py的内容:

from mylogger import get_logger

_logger = get_logger()

_logger.info('trying info')
_logger.debug('trying debug')

但是我面临两个问题。它打印日志两次,格式化程序每次都不起作用:

09/18/2015 09:59:54 PM my_super_logger trying info 
INFO:my_super_logger:trying info
09/18/2015 09:59:54 PM my_super_logger trying debug
DEBUG:my_super_logger:trying debug

我的 get_logger 代码究竟有什么问题?

我需要自定义格式。但是我发现如果不添加处理程序,我就无法添加 formatter。所以这就是我添加 StreamHandler 的原因。并且在这个 answer 中提到了 if block 的原因.否则,我会打印出重复的日志消息。

最佳答案

根记录器也发出消息。停止传播到根:

log.propagate = False

如果您想格式化所有 日志输出(以便消息传播到记录器),请为根记录器设置格式化程序。

您可以使用 logging.basicConfig() 来做到这一点如果尚未向记录器发送任何内容,或者通过遍历根记录器的 logger.handlers 列表,则调用;如果您愿意,您可以选择任何 StreamHandlers:

root_logger = logging.getLogger()  # no name
for handler in root_logger.handlers:
if isinstance(handler, logging.Streamhandler):
handler.setFormatter(formatter)

关于Python 记录器格式不格式化字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32657771/

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