gpt4 book ai didi

Python 记录器消息显示在单独的行上

转载 作者:行者123 更新时间:2023-12-01 02:47:26 24 4
gpt4 key购买 nike

我在正在处理的 Python 应用程序中格式化记录器输出时遇到了一些问题。目前,我正在一个独立文件中创建记录器并将其存储在类变量中,如下所示...

    import logging

class Logging():
FORMAT = '[%(levelname)s]: %(asctime)-15s'
logging.basicConfig(format=FORMAT)
logger = logging.getLogger('Mariner')
ch = logging.StreamHandler()
logger.addHandler(ch)
logger.setLevel(logging.INFO)

对于所有需要日志记录功能的类,我只需导入我的记录器类,如下所示:

    import Logging from Logging

然后我继续引用记录器类变量的用法,如下所示:

    Logging.logger.info("some message")

当日志消息出现在我的控制台中时,它们跨越两行,第一行包含格式化输出,第二行包含纯文本消息。例如:

    [INFO]: 2017-07-16 19:28:47,888
writing book state to mongo db...

我还尝试将消息属性显式添加到我的格式字符串中,但这会导致消息被打印两次:一次在带格式的第一行,一次在没有格式的第二行。

我是 Python 日志记录新手,并且看到其他用户确定他们的问题是由附加的多个处理程序引起的。但是,我认为在我的情况下情况并非如此,因为我试图声明一次记录器并跨类共享相同的实例。如果这确实是问题所在,我很抱歉提出重复的问题,并希望得到一些指导。

*旁注:我在单独线程上运行的进程中使用相同的记录器,但是我读过一些有关 python 中的日志记录实现的内容,它似乎是线程安全的。

最佳答案

您实际上遇到了“多个处理程序附加问题”。您使用第一条消息触发了某种默认处理程序,然后 StreamHandler 打印出实际的消息。如果您删除不将 StreamHandler 添加到记录器并将格式字符串更改为 '[%(levelname)s]: %(asctime)-15s',则应该将日志打印在一行上。

顺便说一句,我认为将记录器放入类中没有帮助。我认为最好在启动时初始化一次,然后让单独的线程通过名称(或返回 getLogger 返回的记录器的包装方法)引用它。也许该名称可以存储在常数。

关于Python 记录器消息显示在单独的行上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45134586/

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