Browse Source

Fixes issue where logging objects would give <Unrepresentable: ..>

Ask Solem 14 years ago
parent
commit
edf3b3f33a
2 changed files with 8 additions and 6 deletions
  1. 2 0
      celery/utils/encoding.py
  2. 6 6
      celery/worker/consumer.py

+ 2 - 0
celery/utils/encoding.py

@@ -9,6 +9,8 @@ def default_encoding():
 
 
 
 
 def safe_str(s, errors="replace"):
 def safe_str(s, errors="replace"):
+    if not isinstance(s, basestring):
+        return safe_repr(s, errors)
     encoding = default_encoding()
     encoding = default_encoding()
     try:
     try:
         if isinstance(s, unicode):
         if isinstance(s, unicode):

+ 6 - 6
celery/worker/consumer.py

@@ -78,7 +78,7 @@ from celery.datastructures import AttributeDict
 from celery.exceptions import NotRegistered
 from celery.exceptions import NotRegistered
 from celery.utils import noop
 from celery.utils import noop
 from celery.utils import timer2
 from celery.utils import timer2
-from celery.utils.encoding import safe_repr, safe_str
+from celery.utils.encoding import safe_repr
 from celery.worker import state
 from celery.worker import state
 from celery.worker.job import TaskRequest, InvalidTaskError
 from celery.worker.job import TaskRequest, InvalidTaskError
 from celery.worker.control.registry import Panel
 from celery.worker.control.registry import Panel
@@ -385,13 +385,13 @@ class Consumer(object):
             except self.connection_errors + (AttributeError, ), exc:
             except self.connection_errors + (AttributeError, ), exc:
                 self.logger.critical(
                 self.logger.critical(
                     "Couldn't ack %r: body:%r reason:%r" % (
                     "Couldn't ack %r: body:%r reason:%r" % (
-                        message.delivery_tag, safe_str(body), exc))
+                        message.delivery_tag, safe_repr(body), exc))
 
 
         if not body.get("task"):
         if not body.get("task"):
             warnings.warn(RuntimeWarning(
             warnings.warn(RuntimeWarning(
                 "Received and deleted unknown message. Wrong destination?!? \
                 "Received and deleted unknown message. Wrong destination?!? \
                 the full contents of the message body was: %s" % (
                 the full contents of the message body was: %s" % (
-                 safe_str(body), )))
+                 safe_repr(body), )))
             ack()
             ack()
             return
             return
 
 
@@ -404,11 +404,11 @@ class Consumer(object):
 
 
         except NotRegistered, exc:
         except NotRegistered, exc:
             self.logger.error(UNKNOWN_TASK_ERROR % (
             self.logger.error(UNKNOWN_TASK_ERROR % (
-                    exc, safe_str(body)), exc_info=sys.exc_info())
+                    exc, safe_repr(body)), exc_info=sys.exc_info())
             ack()
             ack()
         except InvalidTaskError, exc:
         except InvalidTaskError, exc:
             self.logger.error(INVALID_TASK_ERROR % (
             self.logger.error(INVALID_TASK_ERROR % (
-                    str(exc), safe_str(body)), exc_info=sys.exc_info())
+                    str(exc), safe_repr(body)), exc_info=sys.exc_info())
             ack()
             ack()
         else:
         else:
             self.on_task(task)
             self.on_task(task)
@@ -485,7 +485,7 @@ class Consumer(object):
         self.logger.critical(
         self.logger.critical(
             "Can't decode message body: %r (type:%r encoding:%r raw:%r')" % (
             "Can't decode message body: %r (type:%r encoding:%r raw:%r')" % (
                     exc, message.content_type, message.content_encoding,
                     exc, message.content_type, message.content_encoding,
-                    safe_str(message.body)))
+                    safe_repr(message.body)))
         message.ack()
         message.ack()
 
 
     def reset_pidbox_node(self):
     def reset_pidbox_node(self):