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

Reset python Logger to prevent duplicate logging records

上下文

在一个包含多个 classes 和方法的模块中,我使用 python 日志记录 class 和一个名为 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)

已解决:

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

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

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