重置 python Logger 以防止重复的日志记录

时间:2020-12-29 17:16:35

标签: python-3.x logging spyder

上下文

在具有多个类和方法的模块中,我使用 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)

1 个答案:

答案 0 :(得分:0)

解决了:

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

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

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

相关问题