我想要什么:我的 python 脚本运行,将日志消息输出到控制台和文件。
一旦 python 脚本完成运行,我希望能够删除/编辑日志文件。我在 Windows7 上使用 Spyder IDE。
示例代码:
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
hdlr = logging.FileHandler("/Users/mds/Dropbox/_python/logger-debug.txt")
logger.addHandler(hdlr)
logger.error("Am I duplicating error entries?")
hdlr.close()
我遇到的问题:
我第一次运行脚本时:
控制台:
runfile('C:/Users/mds/Dropbox/_python/logger-debugger.py', wdir='C:/Users/mds/Dropbox/_python')
ERROR:__main__:Am I duplicating error entries?
logger-debug.txt:
Am I duplicating error entries?
我第二次运行脚本: 控制台:
runfile('C:/Users/mds/Dropbox/_python/logger-debugger.py', wdir='C:/Users/mds/Dropbox/_python')
ERROR:__main__:Am I duplicating error entries?
logger-debug.txt
Am I duplicating error entries?
Am I duplicating error entries?
Am I duplicating error entries?
我第三次运行脚本:
控制台:
runfile('C:/Users/mds/Dropbox/_python/logger-debugger.py', wdir='C:/Users/mds/Dropbox/_python')
ERROR:__main__:Am I duplicating error entries?
logger-debug.txt
Am I duplicating error entries?
Am I duplicating error entries?
Am I duplicating error entries?
Am I duplicating error entries?
Am I duplicating error entries?
Am I duplicating error entries?
显然仅仅关闭处理程序是不够的。它还需要从记录器实例中删除。
所以现在最后一个正确的例子是:
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
"""remember to close this handler at finish!!!"""
hdlr = logging.FileHandler("/Users/mds/Dropbox/_python/logger-debug.txt")
logger.addHandler(hdlr)
logger.error("Am I duplicating error entries?")
hdlr.close()
logger.removeHandler(hdlr)
注意新版本中的 logger.removeHandler(hdlr)
。
所以这解决了锁定文件的问题。它还解决了多次运行脚本多次写入相同日志消息的问题。现在很明显这种情况正在发生,因为仍然有多个文件处理程序链接到该记录器实例 (main),因此许多处理程序同时写入了相同的错误消息。这意味着我确实不必必须使用覆盖文件模式,我也可以使用附加文件模式。
我看到了 old Stack Overflow message有这段代码用于删除所有处理程序。
handlers = logger.handlers[:]
for handler in handlers:
handler.close()
logger.removeHandler(handler)
关于python - Spyder IDE 中的重复日志条目和锁定的日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34554967/
欢迎光临 OStack程序员社区-中国程序员成长平台 (http://ostack.cn/) | Powered by Discuz! X3.4 |