11#
22# Copyright (C) 2010-2012 Vinay Sajip. All rights reserved. Licensed under the new BSD license.
3+ # (Note: 2018 modifications by @stamparm)
34#
5+
46import logging
57import os
68import re
@@ -127,9 +129,9 @@ def output_colorized(self, message):
127129
128130 ctypes .windll .kernel32 .SetConsoleTextAttribute (h , color )
129131
130- def colorize (self , message , record ):
131- if record . levelno in self .level_map and self .is_tty :
132- bg , fg , bold = self .level_map [record . levelno ]
132+ def colorize (self , message , levelno ):
133+ if levelno in self .level_map and self .is_tty :
134+ bg , fg , bold = self .level_map [levelno ]
133135 params = []
134136
135137 if bg in self .color_map :
@@ -148,11 +150,32 @@ def colorize(self, message, record):
148150 else :
149151 prefix = ""
150152
151- message = "%s%s" % (prefix , '' .join ((self .csi , ';' .join (params ),
152- 'm' , message , self .reset )))
153+ match = re .search (r"\[([A-Z]+)\]" , message )
154+ if match :
155+ level = match .group (1 )
156+ if message .startswith ("\x1b [1m" ):
157+ message = message .replace ("\x1b [1m" , "" )
158+ reset = self .reset + "\x1b [1m"
159+ params .append ('1' )
160+ else :
161+ reset = self .reset
162+ message = message .replace (level , '' .join ((self .csi , ';' .join (params ), 'm' , level , reset )), 1 )
163+ else :
164+ message = "%s%s" % (prefix , '' .join ((self .csi , ';' .join (params ), 'm' , message , self .reset )))
165+
166+ match = re .search (r"\A\s*\[([\d:]+)\]" , message )
167+ if match :
168+ time = match .group (1 )
169+ if not message .endswith (self .reset ):
170+ reset = self .reset
171+ elif message .startswith ("\x1b [1m" ): # bold
172+ reset = self .reset + "\x1b [1m"
173+ else :
174+ reset = self .reset
175+ message = message .replace (time , '' .join ((self .csi , str (self .color_map ["cyan" ] + 30 ), 'm' , time , reset )), 1 )
153176
154177 return message
155178
156179 def format (self , record ):
157180 message = logging .StreamHandler .format (self , record )
158- return self .colorize (message , record )
181+ return self .colorize (message , record . levelno )
0 commit comments