【发布时间】:2018-01-29 16:28:36
【问题描述】:
暂时完全禁用日志记录
我正在尝试在 Python 中编写一个新的日志处理程序,它将日志消息的 json 表示形式发布到 HTTP 端点,并且我正在使用请求库进行发布。问题是 request 和 urllib3(由 request 使用)都记录了日志,并且它们的记录器具有传播=True,这意味着它们记录的日志将传播到任何父记录器。如果我的日志处理程序的用户创建了一个没有给定名称的记录器,它将成为根记录器,因此它将接收此消息,从而导致记录的无限循环。我对如何解决这个问题有点迷茫,我有两个看起来都很脆弱的建议。
1) 获取“reguest”和“urllib3”记录器,将它们的传播值设置为 false,在将传播值设置回其旧值之前发布日志消息。
2) 检查传入记录的名称是否包含“.request”或“.urllib3”,如果有则忽略该记录。
如果请求库将 urllib3 替换为其他内容或更改其记录器的名称,这两种方法都会严重损坏。在多线程或多进程的情况下,方法 1 似乎也可能会出现问题。
我想要的是某种方式从某个点禁用当前线程的所有日志记录,然后在我们发布消息后再次启用它,但我不知道有什么方法可以做到这一点。
有什么建议吗?
【问题讨论】: