gpt4 book ai didi

python - 重新加载重复日志打印的记录器

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

我在 afile.py 文件中有一个记录器,配置如下:

logcurrent = logging.getLogger("app")
logcurrent.setLevel(logging.INFO)
formatter = logging.Formatter(
'%(message)s',
'%d-%m-%Y %I:%M:%S',
)
file_handlerCurrent = logging.handlers.WatchedFileHandler(
'/var/log/app.log'
)
file_handlerCurrent.setLevel(logging.INFO)
file_handlerCurrent.setFormatter(formatter)
logcurrent.addHandler(file_handlerCurrent)

bfile.py 中,我再次重新加载此文件:

reload(afile)

每次执行重新加载时,都会添加一个文件处理程序,并多次打印我的日志。

如何避免?有没有办法获取处理程序列表并删除一些?

最佳答案

是的,有一种方法可以获取和修改已用处理程序列表。 logcurrent.handlers 是已用处理程序的列表,从该列表中删除处理程序也会将其从记录器中删除。

您可以像这样初始化您的记录器:

logcurrent = logging.getLogger("app")
if not logcurrent.hasHandlers():
logcurrent.setLevel(logging.INFO)
formatter = logging.Formatter(
'%(message)s',
'%d-%m-%Y %I:%M:%S',
)
file_handlerCurrent = logging.handlers.WatchedFileHandler(
'/var/log/app.log'
)
file_handlerCurrent.setLevel(logging.INFO)
file_handlerCurrent.setFormatter(formatter)
logcurrent.addHandler(file_handlerCurrent)

def change_all_handlers_to(handler):
logcurrent.handlers = []
logcurrent.addHandler(handler)

def remove_first_handler():
if logcurrent.hasHandlers():
del logcurrent.handlers[0]

编辑

logger.hasHandlers() 方法是 new in Python 3.2 ,如果您使用的是 Python 2,则必须退回到 logger.handlers用于检查记录器是否已初始化。但是 Boolean([]) == False,所以你可以直接请求列表。

不过请注意,logger.handlers 不是“官方 API”的一部分(它不显示 in the documentation ),无论是对于 Python 2 还是 3,所以它可能 可能更改,恕不另行通知。

关于python - 重新加载重复日志打印的记录器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29972842/

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