Automatically append reset_color to log lines

It's confusing that log colors can persist across multiple log lines
if they are not explicitly reset at the end of each line.  This
change automatically appends the reset escape sequence to the end of
each log record passed through the ColorHandler so the behavior is
more what most people would expect.

Change-Id: I5fefdbdd7dd2ca437863bf2117b5a93b527e9776
This commit is contained in:
Ben Nemec 2018-06-07 21:26:15 +00:00
parent 9da1f158b2
commit 9d5065ea32
2 changed files with 5 additions and 6 deletions

View File

@ -148,9 +148,9 @@ class OSJournalHandler(logging.Handler):
class ColorHandler(logging.StreamHandler):
"""Log handler that sets the 'color' key based on the level
To use, include a '%(color)s' entry in the logging_context_format_string
and a '%(reset_color)s' entry at the end of the format string so that the
color setting does not persist between log lines.
To use, include a '%(color)s' entry in the logging_context_format_string.
There is also a '%(reset_color)s' key that can be used to manually reset
the color within a log line.
"""
LEVEL_COLORS = {
_TRACE: '\033[00;35m', # MAGENTA
@ -165,4 +165,4 @@ class ColorHandler(logging.StreamHandler):
def format(self, record):
record.color = self.LEVEL_COLORS[record.levelno]
record.reset_color = '\033[00m'
return logging.StreamHandler.format(self, record)
return logging.StreamHandler.format(self, record) + record.reset_color

View File

@ -987,8 +987,7 @@ class FancyRecordTestCase(LogTestBase):
"[%(request_id)s]: "
"%(instance)s"
"%(resource)s"
"%(message)s"
"%(reset_color)s",
"%(message)s",
logging_default_format_string="%(missing)s: %(message)s")
self.colorlog = log.getLogger()
self._add_handler_with_cleanup(self.colorlog, handlers.ColorHandler)