From 9d62fddab2f3a8c04744d918068df7c0bed6474b Mon Sep 17 00:00:00 2001
From: Sascha Silbe <sascha-org-sugar-git@silbe.org>
Date: Wed, 24 Mar 2010 12:05:14 +0100
Subject: [PATCH] Print stack when encountering an exception during log formatting

When encountering an exception during log formatting, the default
log handler only shows a backtrace up to the logging function,
hiding the actual place of the error. By printing the stack in
addition to the exception, we can pinpoint the faulty log statement.
---
 src/sugar/logger.py |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/src/sugar/logger.py b/src/sugar/logger.py
index 275c57d..6a6b574 100644
--- a/src/sugar/logger.py
+++ b/src/sugar/logger.py
@@ -25,6 +25,7 @@ import collections
 import errno
 import logging
 import sys
+import traceback
 import os
 import repr as repr_
 import decorator
@@ -107,9 +108,14 @@ def start(log_filename=None):
                 if e.errno != errno.ENOSPC:
                     raise e
 
+    def handleError(record):
+        traceback.print_exc()
+        traceback.print_stack()
+
     logging.basicConfig(level=logging.WARNING,
             format="%(created)f %(levelname)s %(name)s: %(message)s",
                         stream=SafeLogWrapper(sys.stderr))
+    root_logger.handlers[0].handleError = handleError
 
     if 'SUGAR_LOGGER_LEVEL' in os.environ:
         set_level(os.environ['SUGAR_LOGGER_LEVEL'])
-- 
1.7.0

