
Eric Smith wrote:
I think this would be a great addition. I have to do similar things all of the time, although I never though of using sys.excepthook, for some reason. I'll have to steal your code in the meantime!
A simpler pure Python version would be:
from __future__ import print_function
def logexceptions(also_stderr=True): import sys import traceback import syslog def syslog_exception(etype, evalue, etb): # The result of traceback.format_exception might contain
# embedded newlines, so we have the nested loops.
for line in traceback.format_exception(etype, evalue, etb): for line in line.rstrip().split('\n'): syslog.syslog(line) if also_stderr: print(line, file=sys.stderr) sys.excepthook = syslog_exception
logexceptions(True)
On second thought, maybe it would be better to optionally chain to the existing sys.excepthook instead of assuming it writes to stderr. The above code would become: def logexceptions(chain=True): import sys import traceback import syslog current_hook = sys.excepthook def syslog_exception(etype, evalue, etb): if chain: current_hook(etype, evalue, etb) # The result of traceback.format_exception might contain # embedded newlines, so we have the nested loops. for line in traceback.format_exception(etype, evalue, etb): for line in line.rstrip().split('\n'): syslog.syslog(line) sys.excepthook = syslog_exception I think I'll open an issue for this. I don't think the language moratorium would preclude its addition. Eric. -- Eric.