Python 具有重新加载重复日志打印功能的记录器
我在Python 具有重新加载重复日志打印功能的记录器,python,logging,Python,Logging,我在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/ap
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()
是,如果您使用的是Python2,则必须返回到以检查记录器是否已初始化。但是布尔([])==False
,因此您可以直接请求列表
但是,请注意,logger.handlers
不是“官方API”的一部分(它没有显示),无论是Python 2还是Python 3,它都可能会在没有通知的情况下更改。这是在模块的顶层完成的吗?将设置放在函数中,只调用一次。