2014-12-18 2 views
4

Я использую несколько модулей в своем проекте, однако модули выводят множество журналов из регистратора, что раздражает. Поэтому я выключаю журналы:Как отключить регистраторы из других модулей?

boto_log = logging.getLogger("boto") 
boto_log.setLevel(logging.CRITICAL) 
es_log = logging.getLogger("elasticsearch") 
es_log.setLevel(logging.CRITICAL) 
urllib3_log = logging.getLogger("urllib3") 
urllib3_log.setLevel(logging.CRITICAL) 

Хотя это работает, код выглядит многословным. Есть ли лучший, более простой способ, которым я могу это сделать?

ответ

4

Может быть, вы можете реорганизовывать его для того, чтобы сократить некоторые из шаблонных:

for _ in ("boto", "elasticsearch", "urllib3"): 
    logging.getLogger(_).setLevel(logging.CRITICAL) 
+0

Так что мне все еще нужно перебирать все модули, которые сами используют регистраторы? – shihpeng

+1

Кто-то может придумать лучший способ, но, по крайней мере, это не так много. Я бы сказал, что «явный лучше, чем неявный», поэтому я не думаю, что это плохая идея явно отключить журналы, которые я хочу отключить (вместо того, чтобы делать это автоматически и потерять какое-то важное сообщение из-за этого). Похож на хороший компромисс между ясностью и простотой использования. –

+0

«Явное лучше, чем неявное» Я согласен с этим :) – shihpeng

1

Вы можете отключить существующие регистратор либо с logging.config.dictConfig или logging.config.fileConfig.

import logging.config 
logging.config.dictConfig({ 
    'version': 1, 
    # Other configs ... 
    'disable_existing_loggers': True 
}) 

Вы также можете перевернуть существующие регистраторы и отключить их вручную.

for name, logger in logging.root.manager.loggerDict.iteritems(): 
    logger.disabled=True 
Смежные вопросы