暂时完全禁用日志记录
我试图用Python编写一个新的日志处理程序,它将日志消息的json表示形式发布到HTTP端点,并且我正在使用请求库进行发布。问题在于,请求日志和urllib3(供请求使用)日志以及它们的记录器均已传播= True,这意味着它们记录的日志将被传播至任何父记录器。如果我的日志处理程序的用户创建了一个没有给出名称的记录器,它将成为根记录器,因此它将接收到此消息,从而导致无限循环的记录。我对如何解决此问题有些迷惑,我有两个建议似乎都很脆弱。
1)获取“ reguest”和“ urllib3”记录器,将其传播值设置为false,在将传播值设置回其旧值之前发布日志消息。
2)检查传入记录的名称是否包含“ .request”或“ .urllib3”,如果存在,则忽略该记录。
如果请求库用其他内容替换urllib3或更改其记录器的名称,则这两种方法都将严重中断。在多线程或多进程的情况下,方法1似乎也有问题。
我想要的是某种方法,从某个角度禁用当前线程的所有日志记录,然后在发布消息后再次启用它,但是我不知道有什么方法可以这样做。
有什么建议么?
最佳答案
导入os.devnull并将其设置为父记录器的默认文件处理程序?
我通常将所有日志刷新到devnull,除非已明确设置(否则,不建议这样做)。