В Python, как убедиться, что любые исключения регистрируются с помощью регистратора?
В приложении Python, как я могу убедиться, что все, что Stderr также идет в logger
Так что, если, например, если приложение вылетает с неперехваченным исключением, я вижу это в журнале?
Моя текущая настройка регистрации:
logger = logging.getLogger('myapp logger')
logger.setLevel(logging.INFO)
file_log_handler = logging.FileHandler('myapp.log')
logger.addHandler(file_log_handler)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_log_handler.setFormatter(formatter)
logger.addHandler(file_log_handler)
В документации по журналу Python я видел почти все, кроме как отправить stderr в файл журнала.
Я знаю, что могу перенаправить stderr в файл следующим образом:
sys.stderr = open('./myapp_errors.log', 'w')
Тем не менее, я надеюсь использовать logger
регистрировать исключения, чтобы (а) форматирование было согласованным, и (б) я мог регистрировать исключения в одном и том же файле.
1 ответ
Вы можете переопределить sys.excepthook
быть вашим собственным обработчиком. Затем вы можете войти в свой собственный регистратор, как считаете нужным:
import sys
def _excepthook(exctype, exc, tb):
logger.error("An unhandled exception occurred.", exc_info=(exctype, exc, tb))
sys.excepthook = _excepthook
Фактически, стандартное поведение записи в stderr происходит от значения по умолчанию sys.excepthook
,