logger.setLevel не имеет никакого эффекта - PullRequest
0 голосов
/ 18 марта 2020

код:

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' ).

Но установка уровня после some code не работает.

Как мне вернуть его обратно?

Ответы [ 2 ]

3 голосов
/ 18 марта 2020

Вы устанавливаете уровень только на самом регистраторе. Если уровень регистраторов равен NOTSET, эффективный уровень включает все родительские регистраторы, поскольку журналы распространяются вверх по иерархии регистраторов. Если у логгера root есть уровень WARNING, а у логгера 'name' уровень NOTSET, эффективный уровень у логгера 'name' составляет WARNING. ('root' является предком каждого регистратора)

Доступ к регистратору root возможен с любым из них: logging.root или logging.getLogger() или logging.getLogger('root'). Уровень можно установить так же, как он установлен на любом логгере:

root = logging.getLogger()
root.setLevel(logging.NOTSET)
0 голосов
/ 19 марта 2020

Благодаря @blues я изменил

logger.setLevel(logging.NOTSET)

на

logging.root.setLevel(logging.NOTSET)

, что решило эту проблему.

...