Всем привет,
Кто хорошо понимает в библиотеке logging в Python? Есть такой кусок простого кода:
import logging
import sys
# main logger
log=logging.getLogger()
log.setLevel(logging.DEBUG)
# debug, info loggind to stdout
handler=logging.StreamHandler(sys.stdout)
handler.setLevel(logging.DEBUG)
handler.setFormatter(logging.Formatter("%(asctime)s [%(levelname)s]: %(message)s (stdout)"))
log.addHandler(handler)
# warning, error, critical logging to stderr
handler=logging.StreamHandler(sys.stderr)
handler.setLevel(logging.WARNING)
handler.setFormatter(logging.Formatter("%(asctime)s [%(levelname)s]: %(message)s (stderr)"))
log.addHandler(handler)
# test
log.debug("This is DEBUG message")
log.info("This is INFO message")
log.warning("This is WARNING message")
log.error("This is ERROR message")
log.critical("This is CRITICAL message")
На выходе получаем:
2016-09-17 19:00:30,252 [DEBUG]: This is DEBUG message (stdout)
2016-09-17 19:00:30,252 [INFO]: This is INFO message (stdout)
2016-09-17 19:00:30,252 [WARNING]: This is WARNING message (stdout)
2016-09-17 19:00:30,252 [WARNING]: This is WARNING message (stderr)
2016-09-17 19:00:30,252 [ERROR]: This is ERROR message (stdout)
2016-09-17 19:00:30,252 [ERROR]: This is ERROR message (stderr)
2016-09-17 19:00:30,252 [CRITICAL]: This is CRITICAL message (stdout)
2016-09-17 19:00:30,252 [CRITICAL]: This is CRITICAL message (stderr)
Видно, что сообщения уровня WARNING, ERROR и CRITICAL показываются двумя обработчиками сразу.
Как этого избежать? Как запретить первому обработчику трогать все, начиная с WARNING ?