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