I have some code which sets up a logger instance, then installs it as sys.excepthook to capture any uncaught exceptions:
import logging import logging.handlers import sys FACILITY = logging.handlers.SysLogHandler.LOG_LOCAL6 mylogger = logging.getLogger('spam') handler = logging.handlers.SysLogHandler( address='/dev/log', facility=FACILITY) formatter = logging.Formatter("%(levelname)s:%(message)s [%(module)s]") handler.setFormatter(formatter) mylogger.addHandler(handler) mylogger.setLevel(logging.DEBUG) mylogger.info('started logging') def my_error_handler(type, value, tb): msg = "Uncaught %s: %s" % (type, value) mylogger.exception(msg) sys.__excepthook__(type, value, tb) # print the traceback to stderr # Install exception handler. mylogger.info('installing error handler') sys.excepthook = my_error_handler foo # Die with uncaught NameError. If I run this code, the INFO logging messages are logged, but the exception is not. Instead it is printed to the console: Error in sys.excepthook: Traceback (most recent call last): File "/home/steve/mylogging.py", line 28, in my_error_handler mylogger.exception(msg) AttributeError: 'NoneType' object has no attribute 'exception' Original exception was: Traceback (most recent call last): [...] File "/home/steve/mylogging.py", line 35, in <module> foo NameError: name 'foo' is not defined (I've trimmed out some of the traceback, because the details aren't relevant.) Any ideas what I'm doing wrong? How does mylogger get set to None? -- Steven -- https://mail.python.org/mailman/listinfo/python-list