首页 > 解决方案 > logger.setLevel 没有效果

问题描述

代码:

import logging

logging.root.setLevel(logging.NOTSET)
logger = logging.getLogger('name')
logger.setLevel(logging.NOTSET)

def func():
  logger.info('1')
  print(logging.getLevelName(logger.getEffectiveLevel()))
  print(logger.handlers)
  **some code**
  logger.info('2')
  print(logging.getLevelName(logger.getEffectiveLevel()))
  print(logger.handlers)
  logger.setLevel(logging.NOTSET)
  logger.info('3')
  print(logging.getLevelName(logger.getEffectiveLevel()))
  print(logger.handlers)

输出:

1
NOTSET
[]
WARNING
[]
WARNING
[]

我假设some code更改记录器的级别(我确定不是带有 name 的记录器'name')。

但是设置之后的级别some code不起作用。

我该如何设置它?

标签: pythonpython-3.xlogging

解决方案


您只是在记录器本身上设置级别。如果记录器级别是NOTSET有效级别,则包括所有父记录器,因为日志会向上传播记录器层次结构。如果根记录器具有级别WARNING并且'name'记录器具有级别,则记录器NOTSET的有效级别'name'WARNING. ('root'是每个记录器的祖先)

可以使用以下任何一种方式访问​​根记录器:logging.rootlogging.getLogger()logging.getLogger('root')。可以像在任何记录器上设置级别一样设置级别:

root = logging.getLogger()
root.setLevel(logging.NOTSET)

推荐阅读