Я определяю корневой логгер и обработчики для него:
_root = logging.getLogger()
_sh = logging.StreamHandler()
_fh = logging.FileHandler('./error.log', delay = True)
_root.addHandler(_sh)
_root.addHandler(_fh)
И экземпляр модуля логгера:
_log = logging.getLogger("Main")
# In other file
_log = logging.getLogger("Configuration")
Теперь я звоню _log.exception
в блоке try..except:
_log.exception("Test")
Теперь я получаю трассировку в консоли и файле. Я пытаюсь подавить печать exc_info с помощью обработчика консоли, но не с помощью обработчика файла:
class _TraceBackFilter(logging.Filter):
def filter(self, rec):
rec.exc_info = None
return True
_sh = logging.StreamHandler()
_sh.addFilter(_TraceBackFilter())
_root.addHandler(_sh)
Это работает как для файлового, так и для консольного обработчика, трассировка полностью удалена для всех обработчиков, но мне это нужно только для консоли. Есть ли способ подавить exc_info только для обработчика консоли, а не для обработчика файла?
EDIT:
Я изменяю _TraceBackFilter
класс.
class _TraceBackFilter(logging.Filter):
def filter(self, rec):
if rec.exc_info:
logging.getLogger(rec.name).log(rec.levelno, rec.getMessage())
return False
else:
return True
Теперь он работает для обработчика консоли, но в файле я удвоил сообщения, одно с и без трассировки.