Parcourir la source

Merge branch 'markhellewell/master'

Ask Solem il y a 15 ans
Parent
commit
38791c3d3d
2 fichiers modifiés avec 32 ajouts et 7 suppressions
  1. 2 0
      celery/conf.py
  2. 30 7
      celery/log.py

+ 2 - 0
celery/conf.py

@@ -51,6 +51,7 @@ _DEFAULTS = {
     "CELERYD_PREFETCH_MULTIPLIER": 4,
     "CELERYD_LOG_FORMAT": DEFAULT_PROCESS_LOG_FMT,
     "CELERYD_TASK_LOG_FORMAT": DEFAULT_TASK_LOG_FMT,
+    "CELERYD_LOG_COLOR": True,
     "CELERYD_LOG_LEVEL": "WARN",
     "CELERYD_LOG_FILE": None, # stderr
     "CELERYBEAT_SCHEDULE_FILENAME": "celerybeat-schedule",
@@ -135,6 +136,7 @@ CELERY_SEND_TASK_ERROR_EMAILS = _get("CELERY_SEND_TASK_ERROR_EMAILS",
 CELERYD_LOG_FORMAT = _get("CELERYD_LOG_FORMAT",
                           compat=["CELERYD_DAEMON_LOG_FORMAT"])
 CELERYD_TASK_LOG_FORMAT = _get("CELERYD_TASK_LOG_FORMAT")
+CELERYD_LOG_COLOR = _get("CELERYD_LOG_COLOR")
 CELERYD_LOG_FILE = _get("CELERYD_LOG_FILE")
 CELERYD_LOG_LEVEL = _get("CELERYD_LOG_LEVEL",
                             compat=["CELERYD_DAEMON_LOG_LEVEL"])

+ 30 - 7
celery/log.py

@@ -13,6 +13,27 @@ from celery.utils.compat import LoggerAdapter
 _hijacked = False
 _monkeypatched = False
 
+BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(8)
+RESET_SEQ = "\033[0m"
+COLOUR_SEQ = "\033[1;%dm"
+BOLD_SEQ = "\033[1m"
+COLOURS = {
+    'WARNING': YELLOW,
+    'DEBUG': BLUE,
+    'CRITICAL': MAGENTA,
+    'ERROR': RED
+}
+
+class ColourFormatter(logging.Formatter):
+    def __init__(self, msg, use_colour=True):
+        logging.Formatter.__init__(self, msg)
+        self.use_colour = use_colour
+
+    def format(self, record):
+        levelname = record.levelname
+        if self.use_colour and levelname in COLOURS:
+            record.msg = COLOUR_SEQ % (30 + COLOURS[levelname]) + record.msg + RESET_SEQ
+        return logging.Formatter.format(self, record)
 
 def get_task_logger(loglevel=None):
     ensure_process_aware_logger()
@@ -64,7 +85,8 @@ def get_default_logger(loglevel=None):
 
 
 def setup_logger(loglevel=conf.CELERYD_LOG_LEVEL, logfile=None,
-        format=conf.CELERYD_LOG_FORMAT, **kwargs):
+        format=conf.CELERYD_LOG_FORMAT, colourize=conf.CELERYD_LOG_COLOR,
+        **kwargs):
     """Setup the ``multiprocessing`` logger. If ``logfile`` is not specified,
     then ``stderr`` is used.
 
@@ -72,11 +94,12 @@ def setup_logger(loglevel=conf.CELERYD_LOG_LEVEL, logfile=None,
 
     """
     return _setup_logger(get_default_logger(loglevel),
-                         logfile, format, **kwargs)
+                         logfile, format, colourize, **kwargs)
 
 
 def setup_task_logger(loglevel=conf.CELERYD_LOG_LEVEL, logfile=None,
-        format=conf.CELERYD_TASK_LOG_FORMAT, task_kwargs=None, **kwargs):
+        format=conf.CELERYD_TASK_LOG_FORMAT, colourize=conf.CELERYD_LOG_COLOR,
+        task_kwargs=None, **kwargs):
     """Setup the task logger. If ``logfile`` is not specified, then
     ``stderr`` is used.
 
@@ -88,17 +111,17 @@ def setup_task_logger(loglevel=conf.CELERYD_LOG_LEVEL, logfile=None,
     task_kwargs.setdefault("task_id", "-?-")
     task_kwargs.setdefault("task_name", "-?-")
     logger = _setup_logger(get_task_logger(loglevel),
-                           logfile, format, **kwargs)
+                           logfile, format, colourize, **kwargs)
     return LoggerAdapter(logger, task_kwargs)
 
 
-def _setup_logger(logger, logfile, format,
-        formatter=logging.Formatter, **kwargs):
+def _setup_logger(logger, logfile, format, colourize,
+        formatter=ColourFormatter, **kwargs):
 
     if logger.handlers: # Logger already configured
         return logger
     handler = _detect_handler(logfile)
-    handler.setFormatter(formatter(format))
+    handler.setFormatter(formatter(format, use_colour=colourize))
     logger.addHandler(handler)
     return logger