【问题标题】:Temporary disable logging completely in Python在 Python 中完全临时禁用日志记录
【发布时间】:2018-01-29 16:28:36
【问题描述】:

暂时完全禁用日志记录

我正在尝试在 Python 中编写一个新的日志处理程序,它将日志消息的 json 表示形式发布到 HTTP 端点,并且我正在使用请求库进行发布。问题是 request 和 urllib3(由 request 使用)都记录了日志,并且它们的记录器具有传播=True,这意味着它们记录的日志将传播到任何父记录器。如果我的日志处理程序的用户创建了一个没有给定名称的记录器,它将成为根记录器,因此它将接收此消息,从而导致记录的无限循环。我对如何解决这个问题有点迷茫,我有两个看起来都很脆弱的建议。

1) 获取“reguest”和“urllib3”记录器,将它们的传播值设置为 false,在将传播值设置回其旧值之前发布日志消息。

2) 检查传入记录的名称是否包含“.request”或“.urllib3”,如果有则忽略该记录。

如果请求库将 urllib3 替换为其他内容或更改其记录器的名称,这两种方法都会严重损坏。在多线程或多进程的情况下,方法 1 似乎也可能会出现问题。

我想要的是某种方式从某个点禁用当前线程的所有日志记录,然后在我们发布消息后再次启用它,但我不知道有什么方法可以做到这一点。

有什么建议吗?

【问题讨论】:

    标签: python logging


    【解决方案1】:

    导入 os.devnull 并将其设置为父记录器的默认文件处理程序可能吗?

    我通常将所有日志刷新到 devnull,除非是明确设置的(不知道这是一个好还是坏的做法)。

    【讨论】:

      猜你喜欢
      • 2015-02-23
      • 2019-12-23
      • 2018-08-03
      • 2021-06-09
      • 2021-12-19
      • 2023-03-20
      • 1970-01-01
      • 2014-07-16
      • 2011-02-16
      相关资源
      最近更新 更多