gpt4 book ai didi

Python:在哪里放置logging.getLogger

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

我尝试将 getLogger 放在模块级别。然而,它也有一些缺点。这是我的例子:

from logging.handlers import TimeRotatingFileHandler

log_monitor = logging.getLogger('monitorlog')
log_monitor.setLevel(logging.DEBUG)
log_monitor.propagate = False
handler = TimedRotatingFileHandler('somedirectory/monitor.log',
when='h',
interval=1,
backupCount=30)
monitor_format = logging.Formatter('%(asctime)s: %(message)s')
handler.setFormatter(monitor_format)
log_monitor.addHandler(handler)

问题是,当其他模块导入这个模块时,上面的代码就会被执行。有可能,当时 somedirectory 甚至不存在,并且构建将失败。

实际上,这个记录器将在一个类中使用,所以我正在考虑将 getLogger 放入该类中。但是,我觉得如果人们创建该类的多个对象,那么该代码段将被多次调用。我想这部分代码应该只被调用一次。

我对Python还很陌生。人们通常将 getLogger 放在哪里,在这种情况下,我应该将这段代码放在哪里?

最佳答案

简短的回答,您只需要确保在创建目录后设置记录器即可。

如果您想导入上述内容然后再创建文件,一种方法是将代码放入函数中。

def monitor_log_setup():
log_monitor = logging.getLogger('monitorlog')
log_monitor.setLevel(logging.DEBUG)
log_monitor.propagate = False
handler = TimedRotatingFileHandler('somedirectory/monitor.log',
when='h',
interval=1,
backupCount=30)
monitor_format = logging.Formatter('%(asctime)s: %(message)s')
handler.setFormatter(monitor_format)
log_monitor.addHandler(handler)

return log_monitor

现在可以安全地导入此模块,您只需确保在开始记录之前(创建目录之后)调用该函数即可。

然后,只要您在代码中需要它,您就可以使用 logging.getLogger('monitorlog') 返回函数中定义的相同记录器。

关于Python:在哪里放置logging.getLogger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28554188/

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