Parcourir la source

Better error reporting when objects can't be represented

Ask Solem il y a 14 ans
Parent
commit
24d9288a46
2 fichiers modifiés avec 7 ajouts et 5 suppressions
  1. 4 3
      celery/log.py
  2. 3 2
      celery/utils/encoding.py

+ 4 - 3
celery/log.py

@@ -44,10 +44,11 @@ class ColorFormatter(logging.Formatter):
 
         if self.use_color and color:
             try:
-                record.msg = color(safe_str(record.msg))
-            except Exception:
+                record.msg = str(color(safe_str(record.msg)))
+            except Exception, exc:
                 record.msg = "<Unrepresentable %r: %r>" % (
-                        type(record.msg), traceback.format_stack())
+                        type(record.msg), exc)
+                record.exc_info = sys.exc_info()
 
         # Very ugly, but have to make sure processName is supported
         # by foreign logger instances.

+ 3 - 2
celery/utils/encoding.py

@@ -20,8 +20,9 @@ def _safe_str(s, errors="replace"):
         if isinstance(s, unicode):
             return s.encode(encoding, errors)
         return unicode(s, encoding, errors)
-    except Exception:
-        return "<Unrepresentable %r: %r>" % (type(s), traceback.format_stack())
+    except Exception, exc:
+        return "<Unrepresentable %r: %r %r>" % (
+                type(s), exc, "\n".join(traceback.format_stack()))
 
 
 def safe_repr(o, errors="replace"):