2017-05-02 90 views
1

我试图从我创建的多个模块中记录信息。我有一个主脚本(main.py)和另一个模块(我们称之为mymodule.py)。我已经设置了一个记录每个模块中,如下所示:Python日志记录 - 关闭多个模块的文件处理程序

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) 
+0

你检查'logger.handlers'看到你确实在年底取消了所有的处理程序? – Evert

+0

我试着更新main.py.请参阅编辑的问题。这没有帮助。 – kronosjt

+0

使用'logging'如下所述:https://docs.python.org/3.6/howto/logging.html#logging-from-multiple-modules – stovfl

回答

0

如果使用Spyder的,那么你的变量可能是活着的工作空间的整个生命周期。你应该只删除该变量file_handler

file_handler.close() 
del file_handler 
相关问题