2017-08-21 38 views
1

临时禁用日志完全临时禁止在Python完全记录

我试图用Python语言编写一个新的日志处理程序将发布日志消息的JSON-表示到HTTP端点,和我使用发布的请求库。问题是请求和urllib3(由请求使用)日志,并且它们的记录器具有propagate = True,这意味着它们记录的日志将传播到任何父记录器。如果我的日志处理程序的用户创建了一个没有给出名称的日志记录器,它将成为根日志记录器,因此它会收到此消息,导致无限循环的日志记录。我对如何解决这个问题有点遗憾,并且我有两条看起来很脆弱的建议。

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

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

如果请求库用别的东西替换urllib3或更改其记录器的名称,这两种方法都会坏掉。在多线程或多进程的情况下,方法1似乎也可能存在问题。

我想要的是某种方式从某个点禁用当前线程的所有日志记录,然后在我们发布邮件后再次启用它,但我不知道任何方式来执行此操作。

有什么建议吗?

回答

1

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

我通常会将所有日志刷新到devnull,除非明确设置(不知道是否是好的或不好的做法)。