Explorar o código

The "func" argument to loggging.LogRecord was added in Py 2.5, and logging._checkLevel in 2.7, so need to support this on older versions.

Ask Solem %!s(int64=14) %!d(string=hai) anos
pai
achega
165afb9c71
Modificáronse 1 ficheiros con 23 adicións e 3 borrados
  1. 23 3
      celery/utils/compat.py

+ 23 - 3
celery/utils/compat.py

@@ -290,10 +290,31 @@ except ImportError:
     collections.defaultdict = defaultdict # Pickle needs this.
 
 ############## logging.LoggerAdapter ########################################
+import inspect
 import logging
 import multiprocessing
 import sys
 
+from logging import LogRecord
+
+# The func argument to LogRecord was added in 2.5
+if "func" not in inspect.getargspec(LogRecord.__init__)[0]:
+    def LogRecord(name, level, fn, lno, msg, args, exc_info, func):
+        return logging.LogRecord(name, level, fn, lno, msg, args, exc_info)
+
+
+def _checkLevel(level):
+    if isinstance(level, int):
+        rv = level
+    elif str(level) == level:
+        if level not in logging._levelNames:
+            raise ValueError("Unknown level: %r" % level)
+        rv = logging._levelNames[level]
+    else:
+        raise TypeError("Level not an integer or a valid string: %r" % level)
+    return rv
+
+
 class _CompatLoggerAdapter(object):
 
     def __init__(self, logger, extra):
@@ -301,7 +322,7 @@ class _CompatLoggerAdapter(object):
         self.extra = extra
 
     def setLevel(self, level):
-        self.logger.level = logging._checkLevel(level)
+        self.logger.level = _checkLevel(level)
 
     def process(self, msg, kwargs):
         kwargs["extra"] = self.extra
@@ -335,8 +356,7 @@ class _CompatLoggerAdapter(object):
 
     def makeRecord(self, name, level, fn, lno, msg, args, exc_info,
             func=None, extra=None):
-        rv = logging.LogRecord(name, level, fn, lno,
-                               msg, args, exc_info, func)
+        rv = LogRecord(name, level, fn, lno, msg, args, exc_info, func)
         if extra is not None:
             for key, value in extra.items():
                 if key in ("message", "asctime") or key in rv.__dict__: