Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 具有重新加载重复日志打印功能的记录器_Python_Logging - Fatal编程技术网

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,它都可能会在没有通知的情况下更改。

这是在模块的顶层完成的吗?将设置放在函数中,只调用一次。