Browse Source

Configure multiprocessing with loglevel ERROR by default (if MP_LOG envvar not set)

Ask Solem 12 years ago
parent
commit
e5caf9cc19
2 changed files with 31 additions and 11 deletions
  1. 30 10
      celery/app/log.py
  2. 1 1
      celery/utils/log.py

+ 30 - 10
celery/app/log.py

@@ -32,6 +32,8 @@ from celery.utils.term import colored
 
 is_py3k = sys.version_info[0] == 3
 
+MP_LOG = os.environ.get('MP_LOG', False)
+
 
 class TaskFormatter(ColorFormatter):
 
@@ -91,25 +93,35 @@ class Logging(object):
             sender=None, loglevel=loglevel, logfile=logfile,
             format=format, colorize=colorize,
         )
+
         if not receivers:
             root = logging.getLogger()
 
             if self.app.conf.CELERYD_HIJACK_ROOT_LOGGER:
                 root.handlers = []
 
-            for logger in filter(None, (root, get_multiprocessing_logger())):
-                self.setup_handlers(logger, logfile, format,
-                                    colorize, **kwargs)
-                if loglevel:
-                    logger.setLevel(loglevel)
-                signals.after_setup_logger.send(
-                    sender=None, logger=logger,
-                    loglevel=loglevel, logfile=logfile,
-                    format=format, colorize=colorize,
-                )
+            # Configure root logger
+            self._configure_logger(
+                root, logfile, loglevel, format, colorize, **kwargs
+            )
+
+            # Configure the multiprocessing logger
+            self._configure_logger(
+                get_multiprocessing_logger(),
+                logfile, loglevel if MP_LOG else logging.ERROR,
+                format, colorize, **kwargs
+            )
+
+            signals.after_setup_logger.send(
+                sender=None, logger=root,
+                loglevel=loglevel, logfile=logfile,
+                format=format, colorize=colorize,
+            )
+
             # then setup the root task logger.
             self.setup_task_loggers(loglevel, logfile, colorize=colorize)
 
+
         # This is a hack for multiprocessing's fork+exec, so that
         # logging before Process.run works.
         logfile_name = logfile if isinstance(logfile, basestring) else ''
@@ -120,6 +132,14 @@ class Logging(object):
         )
         return receivers
 
+    def _configure_logger(self, logger, logfile, loglevel,
+                          format, colorize, **kwargs):
+        if logger is not None:
+            self.setup_handlers(logger, logfile, format,
+                                colorize, **kwargs)
+            if loglevel:
+                logger.setLevel(loglevel)
+
     def setup_task_loggers(self, loglevel=None, logfile=None, format=None,
                            colorize=None, propagate=False, **kwargs):
         """Setup the task logger.

+ 1 - 1
celery/utils/log.py

@@ -212,7 +212,7 @@ def ensure_process_aware_logger():
 
 
 def get_multiprocessing_logger():
-    return mputil.get_logger() if mputil and MP_LOG else None
+    return mputil.get_logger() if mputil else None
 
 
 def reset_multiprocessing_logger():