带有重新加载重复日志打印的记录器

2024-10-06 07:46:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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中,我再次使用重新加载此文件:

^{pr2}$

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

我怎样才能避免呢?有没有办法获取处理程序的列表并删除一些?在


Tags: 文件pyinfologapp处理程序formatterlogging
1条回答
网友
1楼 · 发布于 2024-10-06 07:46:59

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

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

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,如果使用的是python2,则必须返回到^{},以检查记录器是否已初始化。但是Boolean([]) == False,所以您可以直接请求列表。在

不过,请注意,logger.handlers不是“官方API”的一部分(它不显示in the documentation),无论是python2还是python3,因此它可能会在未经通知的情况下更改。在

相关问题 更多 >