我如何才能轻松地设置所有urllib3.*个子博客用户,而不需要明确地设置每个或过滤.

我相信urllib3会让它和它的子博客们变得更好,但是:

loggers = [logging.getLogger(name) for name in logging.root.manager.loggerDict]
for name in loggers:
  if args.debug:
    name.setLevel(logging.DEBUG)
  else:
    name.setLevel(logging.INFO)
logging.getLogger('urllib3').setLevel(logging.WARN) # only set root not subloggers
print(loggers)
#[ <Logger urllib3.util.retry (DEBUG)>, 
#  <Logger urllib3.util (DEBUG)>, 
#  <Logger urllib3 (WARNING)>,
#  <Logger urllib3.connection (DEBUG)>,
#  <Logger urllib3.response (DEBUG)>,
#  <Logger urllib3.connectionpool (DEBUG)>,
#  <Logger urllib3.poolmanager (DEBUG)>,
#  :

我目前的解决办法是将我的所有模块Logging-name以root.开头,并将其他所有内容显式设置为logging.WARN,然后我也会得到根记录器,但命名不太灵活:

loggers = [logging.getLogger(name) for name in logging.root.manager.loggerDict]
for name in loggers:
  if not re.search(r'^<Logger\sroot', str(name)):
    name.setLevel(logging.WARN)
  else:
    if args.debug:
      name.setLevel(logging.DEBUG)
    else:
      name.setLevel(logging.INFO)
print(loggers)

推荐答案

这应该是可行的:

import logging


if __name__ == "__main__":
    logging.getLogger("urllib3").setLevel(logging.INFO)
    print(logging.getLogger("urllib3"))
    print(logging.getLogger("urllib3.util.retry"))
    logging.getLogger("urllib3").setLevel(logging.ERROR)
    print(logging.getLogger("urllib3"))
    print(logging.getLogger("urllib3.util.retry"))

这将输出以下内容:

<Logger urllib3 (INFO)>
<Logger urllib3.util.retry (INFO)>
<Logger urllib3 (ERROR)>
<Logger urllib3.util.retry (ERROR)>

logging.getLogger("urllib3").setLevel(logging.ERROR)修改为logging.getLogger("urllib3.util").setLevel(logging.ERROR)会输出以下内容:

<Logger urllib3 (INFO)>
<Logger urllib3.util.retry (INFO)>
<Logger urllib3 (INFO)>
<Logger urllib3.util.retry (ERROR)>

此外,如果需要更精确的处理,根据logging's documentation,如果子记录器具有级别logging.NOTSET(默认情况下它是这样定义的),则logging前进到"委托给父记录器",这意味着它将查看父记录器并采用不同于logging.NOTSET的第一个级别.urllib3个记录器的默认设置似乎是logging.WARN,但最初将它们设置为logging.NOTSET应该会让您在以后更容易地操作它们的级别.

Python相关问答推荐

在for循环中保存和删除收件箱

仅使用2种 colored颜色 创建热图

如何将自动创建的代码转换为类而不是字符串?

Odoo onchange for invoice_Status of sale事件.订单未触发

每个组每第n行就有Pandas

从Python调用GMP C函数时的分段错误和内存泄漏

如何观察cv2.erode()的中间过程?

Python panda拆分列保持连续多行

配置Sweetviz以分析对象类型列,而无需转换

仅从风格中获取 colored颜色 循环

Pythind 11无法弄清楚如何访问tuple元素

如何将双框框列中的成对变成两个新列

如何在Python中将returns.context. DeliverresContext与Deliverc函数一起使用?

删除任何仅包含字符(或不包含其他数字值的邮政编码)的观察

为什么以这种方式调用pd.ExcelWriter会创建无效的文件格式或扩展名?

如何在Python脚本中附加一个Google tab(已经打开)

无法使用DBFS File API路径附加到CSV In Datricks(OSError Errno 95操作不支持)

SQLAlchemy Like ALL ORM analog

导入...从...混乱

创建可序列化数据模型的最佳方法