Использование модуля протоколирования python для регистрации всех исключений и ошибок

Я хочу проверить ошибки в конкретном фоновом файле, но стандартный поток ошибок контролируется программой на переднем плане, а ошибки в файле в вопросе не отображаются. Однако я могу использовать модуль logging и записывать вывод в файл. Мне было интересно, как я могу использовать это для регистрации всех исключений, ошибок и их трассировок.

Ответ 1

Вероятно, плохая идея регистрировать любое исключение, созданное в программе, поскольку Python использует исключения также для нормального потока управления.

Поэтому вы должны регистрировать только исключенные исключения. Вы можете легко сделать это с помощью метода exception() журнала , если у вас есть объект исключения.

Чтобы обрабатывать все неперехваченные исключения, вы можете либо обернуть точку входа script в блок try...except, либо путем установки настраиваемого обработчика исключений путем переустановки sys.excepthook():

import logging
import sys

logger = logging.getLogger('mylogger')
# Configure logger to write to a file...

def my_handler(type, value, tb):
    logger.exception("Uncaught exception: {0}".format(str(value)))

# Install exception handler
sys.excepthook = my_handler

# Run your main script here:
if __name__ == '__main__':
    main()