繁体   English   中英

Python日志记录 - 关闭多个模块的文件处理程序

[英]Python Logging - closing filehandlers for multiple modules

我正在尝试从我创建的多个模块中记录信息。 我有一个主脚本( 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)

现在的问题是,一旦脚本停止运行,我就无法删除debug.log,除非我关闭Spyder。 此外,对于每次后续运行,我都会从mymodule.py获取重复的条目。

[D][mymodule:__init__       ]-> object created
[D][mymodule:__init__       ]-> object created

所以似乎有一个打开的文件处理程序,我已经离开了。 我该如何关闭它。 如果我必须在mymodule.py中添加一个file_handler.close() ,我在哪里添加它?

编辑:我在main.py尝试过这个

# clean up file handlers
handlers = logger.handlers[:]
for handler in handlers:
    handler.close()
    logger.removeHandler(handler)

如果您使用Spyder,那么您的变量可能在工作空间的整个生命周期中都存在。 你应该删除变量file_handler

file_handler.close()
del file_handler

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM