• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

python - Spyder IDE 中的重复日志条目和锁定的日志文件

[复制链接]
菜鸟教程小白 发表于 2022-10-25 09:09:15 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我想要什么:我的 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()

我遇到的问题:

  1. 脚本运行完毕后,文件上仍有锁 enter image description here

  2. 每次我运行脚本时,日志文件都会增加许多重复条目。

我第一次运行脚本时:

控制台:

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?



Best Answer-推荐答案


显然仅仅关闭处理程序是不够的。它还需要从记录器实例中删除。

所以现在最后一个正确的例子是:

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)

所以这解决了锁定文件的问题。它还解决了多次运行脚本多次写入相同日志消息的问题。现在很明显这种情况正在发生,因为仍然有多个文件处理程序链接到该记录器实例 (ma​​in),因此许多处理程序同时写入了相同的错误消息。这意味着我确实不必必须使用覆盖文件模式,我也可以使用附加文件模式。

我看到了 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap