[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnue] r9766 - in trunk/gnue-common/src: apps base
From: |
reinhard |
Subject: |
[gnue] r9766 - in trunk/gnue-common/src: apps base |
Date: |
Tue, 24 Jul 2007 17:26:46 -0500 (CDT) |
Author: reinhard
Date: 2007-07-24 17:26:45 -0500 (Tue, 24 Jul 2007)
New Revision: 9766
Modified:
trunk/gnue-common/src/apps/GBaseApp.py
trunk/gnue-common/src/base/log.py
Log:
Added exception hook.
issue123 in-progress
Modified: trunk/gnue-common/src/apps/GBaseApp.py
===================================================================
--- trunk/gnue-common/src/apps/GBaseApp.py 2007-07-24 20:56:18 UTC (rev
9765)
+++ trunk/gnue-common/src/apps/GBaseApp.py 2007-07-24 22:26:45 UTC (rev
9766)
@@ -39,6 +39,7 @@
from gnue import paths
+from gnue.common.base import log
from gnue.common.apps import i18n, errors, GConfig, GDebug
from gnue.common.datasources import GConnections
from gnue.common.apps.CommandOption import CommandOption
@@ -759,6 +760,7 @@
overriden by a descendant.
"""
sys.excepthook = sys.__excepthook__
+ log.excepthook(etype, value, traceback)
self._showException (*errors.getException (None, etype, value, traceback))
sys.excepthook = self.excepthook
Modified: trunk/gnue-common/src/base/log.py
===================================================================
--- trunk/gnue-common/src/base/log.py 2007-07-24 20:56:18 UTC (rev 9765)
+++ trunk/gnue-common/src/base/log.py 2007-07-24 22:26:45 UTC (rev 9766)
@@ -32,6 +32,8 @@
import inspect
import logging
import logging.config
+import sys
+import traceback
from gnue.common.base import utils
@@ -43,7 +45,6 @@
'critical_n', 'exception_n']
# TODO:
-# - Exception hook
# - allow for __gnue_logger__ module global variable to use as a logger name
# instead of the module name (make a function in utils.py to search and cache
# module global variables in the module hierarchy)
@@ -292,6 +293,31 @@
# -----------------------------------------------------------------------------
+# Exception hooks
+# -----------------------------------------------------------------------------
+
+def excepthook(etype, evalue, etraceback):
+ """
+ Exception hook to log an exception to the "exception" logger family.
+
+ @param etype: Exception class
+ @type etype: class
+ @param evalue: Exception instance
+ @type evalue: instance
+ @param etraceback: Exception traceback
+ @type etraceback: traceback
+ """
+ # TODO: log to exception.system, exception.admin, or exception.application,
+ # depending on the exception group of gException.
+ # TODO: use getException to receive exception details instead of formatting
+ # the exception here. Could be implemented by overwriting
+ # Formatter.formatException().
+ # TODO: use a separate logger per exception class, like
+ #
exception.admin.gnue.common.datasources.GDataSource.ResourceNotFoundError?
+ error_n('exception', "Unhandled exception occured",
+ exc_info=(etype, evalue, etraceback))
+
+# -----------------------------------------------------------------------------
# Log to the logger named after the calling module
# -----------------------------------------------------------------------------
@@ -378,6 +404,9 @@
"""
Log an exception to the logger named after the calling module.
+ This function can be used in a try...except block to log an exception
+ before it is discarded.
+
@param msg: Message to log.
@type msg: string or unicode
@return: always True, so the call can be prefixed with assert.
@@ -497,6 +526,9 @@
"""
Log an exception to the logger defined through the C{name} parameter.
+ This function can be used in a try...except block to log an exception
+ before it is discarded.
+
@param name: Logger name to log to.
@type name: string
@param msg: Message to log.
@@ -533,7 +565,22 @@
frame = frame.f_back
return ("(unknown file)", 0, "(unknown function)")
+ def makeRecord(self, name, level, fn, lno, msg, args, exc_info, *vargs):
+ """
+ Create the LogRecord.
+ In case of an exception, the filename, line number and function name of
+ the code line causing the exception is substituted.
+ """
+ if exc_info is not None:
+ (fn, lno, func, text) = traceback.extract_tb(exc_info[2])[-1]
+ # This parameter only exists with Python 2.5+
+ if vargs:
+ vargs[0] = func
+ return logging.Logger.makeRecord(self, name, level, fn, lno, msg, args,
+ exc_info, *vargs)
+
+
# -----------------------------------------------------------------------------
# Module initialization
# -----------------------------------------------------------------------------
@@ -551,3 +598,6 @@
logging.config.fileConfig(_CONFIG_FILES)
else:
logging.basicConfig()
+
+# Use our exception hook
+sys.excepthook = excepthook
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [gnue] r9766 - in trunk/gnue-common/src: apps base,
reinhard <=