ソースを参照

logging: Default logfile is now sys.__stderr__ instead of sys.stderr, so it does not redirect back to logging. Also, task logger does now disable propagate by default (can be enabled again by task.get_logger(propagate=True)

Ask Solem 14 年 前
コミット
d05b523ee9
2 ファイル変更10 行追加3 行削除
  1. 7 2
      celery/log.py
  2. 3 1
      celery/task/base.py

+ 7 - 2
celery/log.py

@@ -103,7 +103,9 @@ class Logging(object):
     def _detect_handler(self, logfile=None):
         """Create log handler with either a filename, an open stream
         or :const:`None` (stderr)."""
-        if not logfile or hasattr(logfile, "write"):
+        if logfile is None:
+            logfile = sys.__stderr__
+        if hasattr(logfile, "write"):
             return logging.StreamHandler(logfile)
         return logging.FileHandler(logfile)
 
@@ -140,7 +142,8 @@ class Logging(object):
         return self.get_default_logger(name=name)
 
     def setup_task_logger(self, loglevel=None, logfile=None, format=None,
-            colorize=None, task_kwargs=None, app=None, **kwargs):
+            colorize=None, task_kwargs=None, propagate=False, app=None,
+            **kwargs):
         """Setup the task logger.
 
         If `logfile` is not specified, then `sys.stderr` is used.
@@ -159,6 +162,8 @@ class Logging(object):
         task_kwargs.setdefault("task_name", "-?-")
         logger = self._setup_logger(self.get_task_logger(loglevel, task_name),
                                     logfile, format, colorize, **kwargs)
+        logger.propagate = int(propagate)    # this is an int for some reason.
+                                             # better to not question why.
         return LoggerAdapter(logger, task_kwargs)
 
     def redirect_stdouts_to_logger(self, logger, loglevel=None):

+ 3 - 1
celery/task/base.py

@@ -270,7 +270,8 @@ class BaseTask(object):
         raise NotImplementedError("Tasks must define the run method.")
 
     @classmethod
-    def get_logger(self, loglevel=None, logfile=None, **kwargs):
+    def get_logger(self, loglevel=None, logfile=None, propagate=False,
+            **kwargs):
         """Get task-aware logger object.
 
         See :func:`celery.log.setup_task_logger`.
@@ -282,6 +283,7 @@ class BaseTask(object):
             logfile = self.request.logfile
         return self.app.log.setup_task_logger(loglevel=loglevel,
                                               logfile=logfile,
+                                              propagate=propagate,
                                               task_kwargs=self.request.kwargs)
 
     @classmethod