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

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 преди 15 години
родител
ревизия
024a2bf59c
променени са 2 файла, в които са добавени 8 реда и са изтрити 4 реда
  1. 5 2
      celery/log.py
  2. 3 2
      celery/task/base.py

+ 5 - 2
celery/log.py

@@ -93,6 +93,8 @@ def setup_logging_subsystem(loglevel=conf.CELERYD_LOG_LEVEL, logfile=None,
 def _detect_handler(logfile=None):
     """Create log handler with either a filename, an open stream
     or ``None`` (stderr)."""
+    if logfile is None:
+        logfile = sys.__stderr__
     if not logfile or hasattr(logfile, "write"):
         return logging.StreamHandler(logfile)
     return logging.FileHandler(logfile)
@@ -128,7 +130,7 @@ def setup_logger(loglevel=conf.CELERYD_LOG_LEVEL, logfile=None,
 
 def setup_task_logger(loglevel=conf.CELERYD_LOG_LEVEL, logfile=None,
         format=conf.CELERYD_TASK_LOG_FORMAT, colorize=conf.CELERYD_LOG_COLOR,
-        task_kwargs=None, **kwargs):
+        task_kwargs=None, propagate=False, **kwargs):
     """Setup the task logger. If ``logfile`` is not specified, then
     ``stderr`` is used.
 
@@ -142,12 +144,13 @@ def setup_task_logger(loglevel=conf.CELERYD_LOG_LEVEL, logfile=None,
     task_kwargs.setdefault("task_name", "-?-")
     logger = _setup_logger(get_task_logger(loglevel, task_name),
                             logfile, format, colorize, **kwargs)
+    logger.propagate = int(propagate)   # this is an int for some reason.
+                                        # better to just not question why.
     return LoggerAdapter(logger, task_kwargs)
 
 
 def _setup_logger(logger, logfile, format, colorize,
         formatter=ColorFormatter, **kwargs):
-
     if logger.handlers:                 # already configured
         return logger
 

+ 3 - 2
celery/task/base.py

@@ -277,14 +277,15 @@ class Task(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`.
 
         """
         return setup_task_logger(loglevel=loglevel, logfile=logfile,
-                                 task_kwargs=kwargs)
+                                 propagate=propagate, task_kwargs=kwargs)
 
     @classmethod
     def establish_connection(self,