首页 > 解决方案 > 重置 python Logger 以防止重复的日志记录

问题描述

语境

在具有多个类和方法的模块中,我使用带有全局变量的 python 日志记录类,称为logger. initialise_logger一旦调用模块,它就会由方法初始化(见下文)。

问题

当我从 Spyder 多次执行该模块时,记录器会为每个记录器消息创建多个记录记录,即在第一次运行后,会打印一次消息“xyz”,在第二次运行后会打印两次,依此类推。当我关闭时Spyder 并再次打开它,模块的第一次运行再次以一条打印消息开始。

我试过的

我的代码

def initialise_logger():
    
    global logger
    
    logger = logging.getLogger("reader")
    logger.setLevel(logging.DEBUG)
    
    console_handler = logging.StreamHandler()
    console_handler.setLevel(logging.DEBUG)
    
    file_handler = logging.FileHandler("mylogfile.log")
    file_handler.setLevel(logging.DEBUG)
    
    logger.addHandler(console_handler)
    logger.addHandler(file_handler)

标签: python-3.xloggingspyder

解决方案


解决了它:

我创建了一个destroy_logger在整个过程结束时触发的新方法。它关闭并删除所有处理程序。这是方法内部的内容:

def destroy_logger():
    
    global logger
    
    while logger.hasHandlers():
        logger.handlers[0].close
        logger.removeHandler(logger.handlers[0])

这个问题在这里帮助我解决了它。它还提到了我也注意到的一个问题:只要打开 IDE,就无法删除日志文件。我上面的方法也解决了这个问题。


推荐阅读