我正在尝试从我创建的多个模块中记录信息。我有一个主脚本(main.py
)和另一个模块(我们称之为mymodule.py
)。我在每个模块中设置了一个记录器,如下所示:
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
# create a file handler
file_handler = logging.FileHandler('debug.log', mode='a')
file_handler.setLevel(logging.DEBUG)
# create a logging format
# we're limiting the levelname to 1 char: I=INFO, D=DEBUG and so on
formatter = logging.Formatter('[%(levelname).1s][%(module)14s:%(funcName)-15s]-> %(message)s')
file_handler.setFormatter(formatter)
# add the handler to the logger
logger.addHandler(file_handler)
在 main.py 中,我加载mymodule.py
并在所有处理结束时执行以下操作。
file_handler.close()
logger.removeHandler(file_handler)
现在的问题是,一旦脚本停止运行,除非我关闭 Spyder,否则我无法删除 debug.log。此外,对于随后的每次运行,我都会从中获得重复的条目mymodule.py
。
[D][mymodule:__init__ ]-> object created
[D][mymodule:__init__ ]-> object created
所以似乎有一个打开的文件处理程序,我已经挂了。我该如何关闭它。如果我必须添加一个file_handler.close()
在mymodule.py
哪里添加它?
编辑:我试过这个main.py
# clean up file handlers
handlers = logger.handlers[:]
for handler in handlers:
handler.close()
logger.removeHandler(handler)