diff --git a/ChangeLog b/ChangeLog index dc1ec89..259ecc8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2010-06-18 Thomas Vander Stichele + + * morituri/common/task.py: + Add exception traceback for easier debugging. + 2010-05-23 Thomas Vander Stichele * morituri.spec.in: diff --git a/morituri/common/task.py b/morituri/common/task.py index cf4cc70..9adb31f 100644 --- a/morituri/common/task.py +++ b/morituri/common/task.py @@ -62,6 +62,7 @@ class Task(object, log.Loggable): runner = None exception = None exceptionMessage = None + exceptionTraceback = None _listeners = None @@ -124,11 +125,15 @@ class Task(object, log.Loggable): self.exception = exception self.exceptionMessage = line + self.exceptionTraceback = traceback.format_exc() self.debug('set exception, %r' % self.exceptionMessage) def setException(self, exception): + import traceback + self.exception = exception self.exceptionMessage = log.getExceptionMessage(exception) + self.exceptionTraceback = traceback.format_exc() self.debug('set exception, %r' % self.exceptionMessage) def addListener(self, listener): @@ -386,8 +391,12 @@ class SyncRunner(TaskRunner, ITaskListener): if task.exception: # catch the exception message # FIXME: this gave a traceback in the logging module - self.debug('raising exception, %r', task.exceptionMessage) - raise TaskException(task.exception, message=task.exceptionMessage) + self.debug('raising TaskException for %r, %r' % ( + task.exceptionMessage, task.exceptionTraceback)) + msg = task.exceptionMessage + if task.exceptionTraceback: + msg += "\n" + task.exceptionTraceback + raise TaskException(task.exception, message=msg) def _startWrap(self, task): # wrap task start such that we can report any exceptions and