Skip to content

Commit 77c28ec

Browse files
committed
add init function to logging_colorer.py
1 parent 833ac1c commit 77c28ec

File tree

1 file changed

+60
-58
lines changed

1 file changed

+60
-58
lines changed

logging_colorer.py

Lines changed: 60 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,16 @@
44
# From http://stackoverflow.com/questions/384076/how-can-i-color-python-logging-output
55

66
import logging
7+
import platform
8+
9+
710
# now we patch Python code to add color support to logging.StreamHandler
811
def add_coloring_to_emit_windows(fn):
9-
# add methods we need to the class
12+
# add methods we need to the class
1013
def _out_handle(self):
1114
import ctypes
1215
return ctypes.windll.kernel32.GetStdHandle(self.STD_OUTPUT_HANDLE)
16+
1317
out_handle = property(_out_handle)
1418

1519
def _set_color(self, code):
@@ -22,87 +26,85 @@ def _set_color(self, code):
2226
setattr(logging.StreamHandler, '_set_color', _set_color)
2327

2428
def new(*args):
25-
FOREGROUND_BLUE = 0x0001 # text color contains blue.
26-
FOREGROUND_GREEN = 0x0002 # text color contains green.
27-
FOREGROUND_RED = 0x0004 # text color contains red.
28-
FOREGROUND_INTENSITY = 0x0008 # text color is intensified.
29-
FOREGROUND_WHITE = FOREGROUND_BLUE|FOREGROUND_GREEN |FOREGROUND_RED
29+
FOREGROUND_BLUE = 0x0001 # text color contains blue.
30+
FOREGROUND_GREEN = 0x0002 # text color contains green.
31+
FOREGROUND_RED = 0x0004 # text color contains red.
32+
FOREGROUND_INTENSITY = 0x0008 # text color is intensified.
33+
FOREGROUND_WHITE = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED
3034
# winbase.h
3135
STD_INPUT_HANDLE = -10
3236
STD_OUTPUT_HANDLE = -11
3337
STD_ERROR_HANDLE = -12
3438

3539
# wincon.h
36-
FOREGROUND_BLACK = 0x0000
37-
FOREGROUND_BLUE = 0x0001
38-
FOREGROUND_GREEN = 0x0002
39-
FOREGROUND_CYAN = 0x0003
40-
FOREGROUND_RED = 0x0004
41-
FOREGROUND_MAGENTA = 0x0005
42-
FOREGROUND_YELLOW = 0x0006
43-
FOREGROUND_GREY = 0x0007
44-
FOREGROUND_INTENSITY = 0x0008 # foreground color is intensified.
45-
46-
BACKGROUND_BLACK = 0x0000
47-
BACKGROUND_BLUE = 0x0010
48-
BACKGROUND_GREEN = 0x0020
49-
BACKGROUND_CYAN = 0x0030
50-
BACKGROUND_RED = 0x0040
51-
BACKGROUND_MAGENTA = 0x0050
52-
BACKGROUND_YELLOW = 0x0060
53-
BACKGROUND_GREY = 0x0070
54-
BACKGROUND_INTENSITY = 0x0080 # background color is intensified.
40+
FOREGROUND_BLACK = 0x0000
41+
FOREGROUND_BLUE = 0x0001
42+
FOREGROUND_GREEN = 0x0002
43+
FOREGROUND_CYAN = 0x0003
44+
FOREGROUND_RED = 0x0004
45+
FOREGROUND_MAGENTA = 0x0005
46+
FOREGROUND_YELLOW = 0x0006
47+
FOREGROUND_GREY = 0x0007
48+
FOREGROUND_INTENSITY = 0x0008 # foreground color is intensified.
49+
50+
BACKGROUND_BLACK = 0x0000
51+
BACKGROUND_BLUE = 0x0010
52+
BACKGROUND_GREEN = 0x0020
53+
BACKGROUND_CYAN = 0x0030
54+
BACKGROUND_RED = 0x0040
55+
BACKGROUND_MAGENTA = 0x0050
56+
BACKGROUND_YELLOW = 0x0060
57+
BACKGROUND_GREY = 0x0070
58+
BACKGROUND_INTENSITY = 0x0080 # background color is intensified.
5559

5660
levelno = args[1].levelno
57-
if(levelno>=50):
58-
color = BACKGROUND_YELLOW | FOREGROUND_RED | FOREGROUND_INTENSITY | BACKGROUND_INTENSITY
59-
elif(levelno>=40):
61+
if levelno >= 50:
62+
color = BACKGROUND_YELLOW | FOREGROUND_RED | FOREGROUND_INTENSITY | BACKGROUND_INTENSITY
63+
elif levelno >= 40:
6064
color = FOREGROUND_RED | FOREGROUND_INTENSITY
61-
elif(levelno>=30):
65+
elif levelno >= 30:
6266
color = FOREGROUND_YELLOW | FOREGROUND_INTENSITY
63-
elif(levelno>=20):
67+
elif levelno >= 20:
6468
color = FOREGROUND_GREEN
65-
elif(levelno>=10):
69+
elif levelno >= 10:
6670
color = FOREGROUND_MAGENTA
6771
else:
68-
color = FOREGROUND_WHITE
72+
color = FOREGROUND_WHITE
6973
args[0]._set_color(color)
7074

7175
ret = fn(*args)
72-
args[0]._set_color( FOREGROUND_WHITE )
73-
#print "after"
76+
args[0]._set_color(FOREGROUND_WHITE)
7477
return ret
78+
7579
return new
7680

81+
7782
def add_coloring_to_emit_ansi(fn):
7883
# add methods we need to the class
7984
def new(*args):
8085
levelno = args[1].levelno
81-
if(levelno>=50):
82-
color = '\x1b[31m' # red
83-
elif(levelno>=40):
84-
color = '\x1b[31m' # red
85-
elif(levelno>=30):
86-
color = '\x1b[33m' # yellow
87-
elif(levelno>=20):
88-
color = '\x1b[32m' # green
89-
elif(levelno>=10):
90-
color = '\x1b[35m' # pink
86+
if levelno >= 50:
87+
color = '\x1b[31m' # red
88+
elif levelno >= 40:
89+
color = '\x1b[31m' # red
90+
elif levelno >= 30:
91+
color = '\x1b[33m' # yellow
92+
elif levelno >= 20:
93+
color = '\x1b[32m' # green
94+
elif levelno >= 10:
95+
color = '\x1b[35m' # pink
9196
else:
92-
color = '\x1b[0m' # normal
93-
args[1].msg = color + args[1].msg + '\x1b[0m' # normal
94-
#print "after"
97+
color = '\x1b[0m' # normal
98+
args[1].msg = color + args[1].msg + '\x1b[0m' # normal
9599
return fn(*args)
100+
96101
return new
97102

98-
import platform
99-
if platform.system()=='Windows':
100-
# Windows does not support ANSI escapes and we are using API calls to set the console color
101-
logging.StreamHandler.emit = add_coloring_to_emit_windows(logging.StreamHandler.emit)
102-
else:
103-
# all non-Windows platforms are supporting ANSI escapes so we use them
104-
logging.StreamHandler.emit = add_coloring_to_emit_ansi(logging.StreamHandler.emit)
105-
#log = logging.getLogger()
106-
#log.addFilter(log_filter())
107-
#//hdlr = logging.StreamHandler()
108-
#//hdlr.setFormatter(formatter())
103+
104+
def init():
105+
if platform.system() == 'Windows':
106+
# Windows does not support ANSI escapes and we are using API calls to set the console color
107+
logging.StreamHandler.emit = add_coloring_to_emit_windows(logging.StreamHandler.emit)
108+
else:
109+
# all non-Windows platforms are supporting ANSI escapes so we use them
110+
logging.StreamHandler.emit = add_coloring_to_emit_ansi(logging.StreamHandler.emit)

0 commit comments

Comments
 (0)