How To Log Uncaught Exceptions In Python?

Better Stack Team
Updated on May 4, 2022

For this, you can use the sys.excepthook that allows us to attach a handler for any unhandled exception:

 
#Creating a logger
logger = logging.getLogger(__name__)
logging.basicConfig(filename='example.log', filemode='w', level=logging.DEBUG)

#Creating a handler
def handle_unhandled_exception(exc_type, exc_value, exc_traceback):
    if issubclass(exc_type, KeyboardInterrupt):
                #Will call default excepthook
        sys.__excepthook__(exc_type, exc_value, exc_traceback)
        return
        #Create a critical level log message with info from the except hook.
    logger.critical("Unhandled exception", exc_info=(exc_type, exc_value, exc_traceback))
#Assign the excepthook to the handler
sys.excepthook = handle_unhandled_exception

First, you will create a logger that will take care of your exceptions.

Then create a handler handle_unhandled_exception that you will later attach to the hook. Then call the __excepthook__ provided by the sys module. This method is invoked every time the exception is uncaught.

Use the info from the hook to create a log message and assign this handler to the sys.excepthook.

You can learn more info about sys.excepthook in the offical documentation.