From 74763d4decae3f367cdef7b92899c64b27d42d7e Mon Sep 17 00:00:00 2001 From: Jeremy Fincher Date: Mon, 30 Aug 2004 20:06:05 +0000 Subject: [PATCH] Added exception revision logging. --- src/fix.py | 11 +++++++++++ src/log.py | 2 ++ 2 files changed, 13 insertions(+) diff --git a/src/fix.py b/src/fix.py index 27a64eac8..0eeb93a84 100644 --- a/src/fix.py +++ b/src/fix.py @@ -42,6 +42,7 @@ __all__ = [] exported = ['ignore', 'reversed', 'window', 'group', 'partition', 'any', 'all', 'rsplit'] +import sys import new import string string.ascii = string.maketrans('', '') @@ -196,6 +197,16 @@ import socket # Some socket modules don't have sslerror, so we'll just make it an error. if not hasattr(socket, 'sslerror'): socket.sslerror = socket.error + +# Trick to get an __revision__ attribute in all exceptions, if possible. +Exception__init__ = Exception.__init__ +def __init__(self, *args, **kwargs): + caller = sys._getframe(1) + module = sys.modules.get(caller.f_globals.get('__name__')) + self.__revision__ = getattr(module, '__revision__', None) + Exception__init__(self, *args, **kwargs) +Exception.__init__ = __init__ + for name in exported: __builtins__[name] = globals()[name] diff --git a/src/log.py b/src/log.py index 5c08fcbbc..7786d6090 100644 --- a/src/log.py +++ b/src/log.py @@ -77,6 +77,8 @@ class Logger(logging.Logger): eStrId = '%s:%s' % (E, path) eId = hex(hash(eStrId) & 0xFFFFF) logging.Logger.exception(self, *args) + if hasattr(e, '__revision__') and e.__revision__: + self.error('Exception __revision__: %r', e.__revision__) self.error('Exception id: %s', eId) # The traceback should be sufficient if we want it. # self.error('Exception string: %s', eStrId)