How do I log a Python error with debug information? How do I log a Python error with debug information? python python

How do I log a Python error with debug information?


logger.exception will output a stack trace alongside the error message.

For example:

import loggingtry:    1/0except ZeroDivisionError:    logging.exception("message")

Output:

ERROR:root:messageTraceback (most recent call last):  File "<stdin>", line 2, in <module>ZeroDivisionError: integer division or modulo by zero

@Paulo Cheque notes, "be aware that in Python 3 you must call the logging.exception method just inside the except part. If you call this method in an arbitrary place you may get a bizarre exception. The docs alert about that."


One nice thing about logging.exception that SiggyF's answer doesn't show is that you can pass in an arbitrary message, and logging will still show the full traceback with all the exception details:

import loggingtry:    1/0except ZeroDivisionError:    logging.exception("Deliberate divide by zero traceback")

With the default (in recent versions) logging behaviour of just printing errors to sys.stderr, it looks like this:

>>> import logging>>> try:...     1/0... except ZeroDivisionError:...     logging.exception("Deliberate divide by zero traceback")... ERROR:root:Deliberate divide by zero tracebackTraceback (most recent call last):  File "<stdin>", line 2, in <module>ZeroDivisionError: integer division or modulo by zero


Using exc_info options may be better, to allow you to choose the error level (if you use exception, it will always be at the error level):

try:    # do something hereexcept Exception as e:    logging.critical(e, exc_info=True)  # log exception info at CRITICAL log level