Where things could go kaboom (changing terminal coloring)

This commit is contained in:
Miroslav Stampar
2018-07-05 14:01:43 +02:00
parent a424e4ab59
commit 57be1856a6
4 changed files with 34 additions and 15 deletions

View File

@@ -1,6 +1,8 @@
#
# Copyright (C) 2010-2012 Vinay Sajip. All rights reserved. Licensed under the new BSD license.
# (Note: 2018 modifications by @stamparm)
#
import logging
import os
import re
@@ -127,9 +129,9 @@ class ColorizingStreamHandler(logging.StreamHandler):
ctypes.windll.kernel32.SetConsoleTextAttribute(h, color)
def colorize(self, message, record):
if record.levelno in self.level_map and self.is_tty:
bg, fg, bold = self.level_map[record.levelno]
def colorize(self, message, levelno):
if levelno in self.level_map and self.is_tty:
bg, fg, bold = self.level_map[levelno]
params = []
if bg in self.color_map:
@@ -148,11 +150,32 @@ class ColorizingStreamHandler(logging.StreamHandler):
else:
prefix = ""
message = "%s%s" % (prefix, ''.join((self.csi, ';'.join(params),
'm', message, self.reset)))
match = re.search(r"\[([A-Z]+)\]", message)
if match:
level = match.group(1)
if message.startswith("\x1b[1m"):
message = message.replace("\x1b[1m", "")
reset = self.reset + "\x1b[1m"
params.append('1')
else:
reset = self.reset
message = message.replace(level, ''.join((self.csi, ';'.join(params), 'm', level, reset)), 1)
else:
message = "%s%s" % (prefix, ''.join((self.csi, ';'.join(params), 'm', message, self.reset)))
match = re.search(r"\A\s*\[([\d:]+)\]", message)
if match:
time = match.group(1)
if not message.endswith(self.reset):
reset = self.reset
elif message.startswith("\x1b[1m"): # bold
reset = self.reset + "\x1b[1m"
else:
reset = self.reset
message = message.replace(time, ''.join((self.csi, str(self.color_map["cyan"] + 30), 'm', time, reset)), 1)
return message
def format(self, record):
message = logging.StreamHandler.format(self, record)
return self.colorize(message, record)
return self.colorize(message, record.levelno)