Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
暂时完全禁用Python中的日志记录_Python_Logging - Fatal编程技术网

暂时完全禁用Python中的日志记录

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

暂时完全禁用日志记录

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

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

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

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

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

有什么建议吗?

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

我通常会将所有日志刷新到devnull,但显式设置的日志除外(不知道这是好的还是坏的做法)