浏览代码

utils.compat.log_with_extra: Support the extra logging argument, by removing it for Python 2.4

Ask Solem 15 年之前
父节点
当前提交
7823fc9515
共有 3 个文件被更改,包括 25 次插入11 次删除
  1. 9 0
      celery/utils/compat.py
  2. 9 2
      celery/worker/controllers.py
  3. 7 9
      celery/worker/job.py

+ 9 - 0
celery/utils/compat.py

@@ -297,6 +297,8 @@ import sys
 
 
 from logging import LogRecord
 from logging import LogRecord
 
 
+log_takes_extra = "extra" in inspect.getargspec(logging.Logger._log)[0]
+
 # The func argument to LogRecord was added in 2.5
 # The func argument to LogRecord was added in 2.5
 if "func" not in inspect.getargspec(LogRecord.__init__)[0]:
 if "func" not in inspect.getargspec(LogRecord.__init__)[0]:
     def LogRecord(name, level, fn, lno, msg, args, exc_info, func):
     def LogRecord(name, level, fn, lno, msg, args, exc_info, func):
@@ -404,6 +406,12 @@ try:
 except ImportError:
 except ImportError:
     LoggerAdapter = _CompatLoggerAdapter
     LoggerAdapter = _CompatLoggerAdapter
 
 
+
+def log_with_extra(logger, level, msg, *args, **kwargs):
+    if not log_takes_extra:
+        kwargs.pop("extra", None)
+    return logger.log(level, msg, *args, **kwargs)
+
 ############## itertools.izip_longest #######################################
 ############## itertools.izip_longest #######################################
 
 
 try:
 try:
@@ -426,6 +434,7 @@ except ImportError:
         except IndexError:
         except IndexError:
             pass
             pass
 
 
+
 ############## itertools.chain.from_iterable ################################
 ############## itertools.chain.from_iterable ################################
 from itertools import chain
 from itertools import chain
 
 

+ 9 - 2
celery/worker/controllers.py

@@ -3,12 +3,14 @@
 Worker Controller Threads
 Worker Controller Threads
 
 
 """
 """
+import logging
 import sys
 import sys
 import threading
 import threading
 import traceback
 import traceback
 from Queue import Empty as QueueEmpty
 from Queue import Empty as QueueEmpty
 
 
 from celery import log
 from celery import log
+from celery.utils.compat import log_with_extra
 
 
 
 
 class Mediator(threading.Thread):
 class Mediator(threading.Thread):
@@ -52,8 +54,13 @@ class Mediator(threading.Thread):
         try:
         try:
             self.callback(task)
             self.callback(task)
         except Exception, exc:
         except Exception, exc:
-            self.logger.error("Mediator callback raised exception %r\n%s" % (
-                exc, traceback.format_exc()), exc_info=sys.exc_info())
+            log_with_extra(self.logger, logging.ERROR,
+                           "Mediator callback raised exception %r\n%s" % (
+                               exc, traceback.format_exc()),
+                           exc_info=sys.exc_info(),
+                           extra={"data": {"hostname": task.hostname,
+                                           "id": task.task_id,
+                                           "name": task.task_name}})
 
 
     def run(self):
     def run(self):
         while not self._shutdown.isSet():
         while not self._shutdown.isSet():

+ 7 - 9
celery/worker/job.py

@@ -1,3 +1,4 @@
+import logging
 import os
 import os
 import sys
 import sys
 import time
 import time
@@ -17,6 +18,7 @@ from celery.registry import tasks
 from celery.utils import noop, kwdict, fun_takes_kwargs
 from celery.utils import noop, kwdict, fun_takes_kwargs
 from celery.utils import truncate_text, maybe_iso8601
 from celery.utils import truncate_text, maybe_iso8601
 from celery.utils.mail import mail_admins
 from celery.utils.mail import mail_admins
+from celery.utils.compat import log_with_extra
 from celery.worker import state
 from celery.worker import state
 
 
 # pep8.py borks on a inline signature separator and
 # pep8.py borks on a inline signature separator and
@@ -474,15 +476,11 @@ class TaskRequest(object):
                    "args": self.args,
                    "args": self.args,
                    "kwargs": self.kwargs}
                    "kwargs": self.kwargs}
 
 
-        self.logger.error(self.error_msg.strip() % context,
-                          exc_info=exc_info,
-                          extra={
-                              "data": {
-                                  "hostname": self.hostname,
-                                  "id": self.task_id,
-                                  "name": self.task_name,
-                              }
-                          })
+        log_with_extra(self.logger, logging.ERROR,
+                       self.error_msg.strip() % context,
+                       extra={"data": {"hostname": self.hostname,
+                                       "id": self.task_id,
+                                       "name": self.task_name}})
 
 
         task_obj = tasks.get(self.task_name, object)
         task_obj = tasks.get(self.task_name, object)
         self.send_error_email(task_obj, context, exc_info.exception,
         self.send_error_email(task_obj, context, exc_info.exception,