Преглед на файлове

celeryd: Errors could not be logged, because of unicode errors

Ask Solem преди 14 години
родител
ревизия
b711ed1ecc
променени са 2 файла, в които са добавени 6 реда и са изтрити 4 реда
  1. 3 2
      celery/log.py
  2. 3 2
      celery/utils/encoding.py

+ 3 - 2
celery/log.py

@@ -14,6 +14,7 @@ from celery import signals
 from celery import current_app
 from celery.utils import LOG_LEVELS, isatty
 from celery.utils.compat import LoggerAdapter
+from celery.utils.encoding import safe_str
 from celery.utils.patch import ensure_process_aware_logger
 from celery.utils.term import colored
 
@@ -40,10 +41,10 @@ class ColorFormatter(logging.Formatter):
 
         if self.use_color and color:
             try:
-                record.msg = color(unicode(record.msg, "utf-8", "replace"))
+                record.msg = color(safe_str(record.msg))
             except Exception, exc:
                 record.msg = "<Unrepresentable %r: %r>" % (type(record.msg),
-                                                           exc)
+                                                           traceback.format_stack())
 
         # Very ugly, but have to make sure processName is supported
         # by foreign logger instances.

+ 3 - 2
celery/utils/encoding.py

@@ -1,4 +1,5 @@
 import sys
+import traceback
 
 
 def default_encoding():
@@ -13,8 +14,8 @@ def safe_str(s, errors="replace"):
         if isinstance(s, unicode):
             return s.encode(encoding, errors)
         return unicode(s, encoding, errors)
-    except Exception, exc:
-        return "<Unrepresentable %r: %r>" % (type(s), exc)
+    except Exception:
+        return "<Unrepresentable %r: %r>" % (type(s), traceback.format_stack())
 
 
 def safe_repr(o, errors="replace"):