【问题标题】:Reset python Logger to prevent duplicate logging records重置python Logger以防止重复的日志记录
【发布时间】:2020-12-29 17:16:35
【问题描述】:

上下文

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

问题

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

我尝试了什么

  • 我试图通过检查是否已经存在同名的记录器 (following this post) 来跳过记录器的初始化 (initialise_logger)。这失败了,因为在我运行 initialise_logger 之前,具有指定名称的记录器确实不存在。
  • 我还尝试在运行 initialise_logger 之前“弹出”所有可用的处理程序 (following this seggestion),但在运行 initialise_logger 之前找不到任何处理程序。

我的代码

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.x logging spyder


    【解决方案1】:

    解决了:

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-01-02
      • 1970-01-01
      • 1970-01-01
      • 2015-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-22
      • 2015-05-28
      相关资源
      最近更新 更多