2012-04-14 3 views
3

У меня есть logger, настроенный из файла, и я хотел бы изменить уровень моего ведения журнала, не меняя файл .conf, но вместо этого используя встроенный код;Изменить уровень python fileConfig logger

import logging.config 

logging.config.fileConfig('..\\LoggingConfig\\loggingfile.conf') 

logging.StreamHandler.setLevel(logging.info) 

logging.debug("Debug") 
logging.info("Info") 

Это должно печатать только строку журнала «Информация» на экране. Я не знаю, на каком объекте можно вызвать setLevel()! logging.StreamHandler.setLevel (logging.info) - это просто удар в темноте после поиска 30 минут ...

Файл loggingfile.conf;

[loggers] 
keys=root 

[logger_root] 
handlers=screen 
level=NOTSET 

[formatter_modfunc] 
format=%(module)-20s %(funcName)-25s %(levelno)-3s: %(message)s 

[handlers] 
keys=screen 

[handler_screen] 
class=StreamHandler 
formatter=modfunc 
level=DEBUG 
args=(sys.stdout,) 
qualname=screen 

ответ

7

Вам нужно позвонить setLevel на вашем Logger инстанции.

LOGGER = logging.getLogger('your.module.file.name') 
LOGGER.setLevel(_level) 
LOGGER.info('foo') 

Если вы используете только основной журнал, вы можете сделать это, как этот

logging.basicConfig(level=_level) 
logging.info('foo') 

См http://docs.python.org/howto/logging.html

+1

Великий, что сделал это, мне нужно знать, как получить экземпляр, используемый 'loggerInstance = logging.getLogger (__ __ имя)', спасибо! –

+0

Рад, что я мог вам помочь :) – cfedermann

+0

спасибо очень полезно – rbp

5

При использовании logging.config.fileConfig и вы хотите, чтобы динамически изменять уровень для все детские регистраторы сразу, вы можете ...

a) set level для root logger:

logging.getLogger().setLevel(logging.WARNING) 

б) disable другие уровни

logging.disable(logging.INFO) 
+0

Все, что я пробовал, не удалось. Только этот ответ (который, к сожалению, не отмечен как правильный), действительно делает это для меня. По какой-то причине, если вы выполните basicConfig, а затем выполните еще один basicConfig, последний не изменит уровень ведения журнала. Только этот метод делает последующее изменение. Хотел бы я понять, почему. –

+0

[Вызов basicConfig() должен появиться перед любыми вызовами debug(), info() и т. Д. Поскольку он предназначен как одноразовый простой способ настройки, только первый вызов действительно что-то делает: последующие вызовы фактически не работают, ОПС.] (https://docs.python.org/3/howto/logging.html) –

Смежные вопросы