diff --git a/rq/logutils.py b/rq/logutils.py index 324553b2..5759a112 100644 --- a/rq/logutils.py +++ b/rq/logutils.py @@ -3,6 +3,7 @@ from __future__ import (absolute_import, division, print_function, unicode_literals) import logging +import sys from rq.utils import ColorizingStreamHandler from rq.defaults import (DEFAULT_LOGGING_FORMAT, @@ -15,9 +16,14 @@ def setup_loghandlers(level=None, date_format=DEFAULT_LOGGING_DATE_FORMAT, if not _has_effective_handler(logger): formatter = logging.Formatter(fmt=log_format, datefmt=date_format) - handler = ColorizingStreamHandler() + handler = ColorizingStreamHandler(stream=sys.stdout) handler.setFormatter(formatter) + handler.addFilter(lambda record: record.levelno < logging.ERROR) + error_handler = ColorizingStreamHandler(stream=sys.stderr) + error_handler.setFormatter(formatter) + error_handler.addFilter(lambda record: record.levelno >= logging.ERROR) logger.addHandler(handler) + logger.addHandler(error_handler) if level is not None: # The level may be a numeric value (e.g. when using the logging module constants) diff --git a/rq/worker.py b/rq/worker.py index 6868f752..bae12f19 100644 --- a/rq/worker.py +++ b/rq/worker.py @@ -974,7 +974,7 @@ class Worker(object): def handle_exception(self, job, *exc_info): """Walks the exception handler stack to delegate exception handling.""" exc_string = Worker._get_safe_exception_string( - traceback.format_exception_only(*exc_info[:2]) + traceback.format_exception(*exc_info) + traceback.format_exception(*exc_info) ) self.log.error(exc_string, exc_info=True, extra={ 'func': job.func_name,