在具有多个类和方法的模块中,我使用 python 日志类和一个名为 logger
的全局变量。一旦模块被调用,它就会通过方法 initialise_logger
(见下文)初始化。
当我从 Spyder 多次执行模块时,记录器为每条记录器消息创建多个日志记录,即在第一次运行后,消息“xyz”被打印一次,在第二次运行后它被打印两次等等。当我关闭 Spyder 并再次打开它时,模块的第一次运行再次开始打印一条消息。
initialise_logger
)。这失败了,因为在我运行 initialise_logger
之前确实不存在具有指定名称的记录器。initialise_logger
之前“弹出”所有可用的处理程序 (following this post),但在运行 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)
答案 0 :(得分:0)
解决了:
我创建了一个新方法 destroy_logger
,它在整个过程结束时触发。它关闭并删除所有处理程序。这是方法内部的内容:
def destroy_logger():
global logger
while logger.hasHandlers():
logger.handlers[0].close
logger.removeHandler(logger.handlers[0])
这个问题 here 帮我解决了这个问题。它还提到了我也注意到的一个问题:只要IDE打开,就不能删除日志文件。这个问题也用我上面的方法解决了。