Вы можете добавить фильтры к файловым манипуляторам. Таким образом вы можете перенаправить определенные уровни в разные файлы.
import logging
class LevelFilter(logging.Filter):
def __init__(self, low, high):
self._low = low
self._high = high
logging.Filter.__init__(self)
def filter(self, record):
if self._low <= record.levelno <= self._high:
return True
return False
logging.basicConfig(level=logging.DEBUG)
log = logging.getLogger('foo')
error_handler = logging.FileHandler('error.log', 'a')
error_handler.addFilter(LevelFilter(40, 40))
warn_handler = logging.FileHandler('warn.log', 'a')
warn_handler.addFilter(LevelFilter(30, 30))
log.addHandler(error_handler)
log.addHandler(warn_handler)
log.debug('debug')
log.info('info')
log.warn('warn')
log.error('error')
Предупреждения будут идти в warn.log, ошибки в error.log. Все остальные уровни не будут храниться в файле.
Пример:
$ python log.py
DEBUG:foo:debug
INFO:foo:info
WARNING:foo:warn
ERROR:foo:error
$ tail -n +1 *.log
==> error.log <==
error
==> warn.log <==
warn
Я запускаю код. Оба файла имеют все журналы. –
Вордс есть опечатка. Он не должен запускаться вообще. Можете ли вы попробовать еще раз? Это работает для меня – Schore
Это странно, если я запустил его в ipython notebok, он не работает, но из командной строки он работает. –