Spaces:
Runtime error
Runtime error
# Copied from https://stackoverflow.com/a/1336640 | |
import logging | |
import platform | |
def add_coloring_to_emit_windows(fn): | |
# add methods we need to the class | |
def _out_handle(self): | |
import ctypes | |
return ctypes.windll.kernel32.GetStdHandle(self.STD_OUTPUT_HANDLE) | |
out_handle = property(_out_handle) | |
def _set_color(self, code): | |
import ctypes | |
# Constants from the Windows API | |
self.STD_OUTPUT_HANDLE = -11 | |
hdl = ctypes.windll.kernel32.GetStdHandle(self.STD_OUTPUT_HANDLE) | |
ctypes.windll.kernel32.SetConsoleTextAttribute(hdl, code) | |
setattr(logging.StreamHandler, '_set_color', _set_color) | |
def new(*args): | |
FOREGROUND_BLUE = 0x0001 # text color contains blue. | |
FOREGROUND_GREEN = 0x0002 # text color contains green. | |
FOREGROUND_RED = 0x0004 # text color contains red. | |
FOREGROUND_INTENSITY = 0x0008 # text color is intensified. | |
FOREGROUND_WHITE = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | |
# winbase.h | |
# STD_INPUT_HANDLE = -10 | |
# STD_OUTPUT_HANDLE = -11 | |
# STD_ERROR_HANDLE = -12 | |
# wincon.h | |
# FOREGROUND_BLACK = 0x0000 | |
FOREGROUND_BLUE = 0x0001 | |
FOREGROUND_GREEN = 0x0002 | |
# FOREGROUND_CYAN = 0x0003 | |
FOREGROUND_RED = 0x0004 | |
FOREGROUND_MAGENTA = 0x0005 | |
FOREGROUND_YELLOW = 0x0006 | |
# FOREGROUND_GREY = 0x0007 | |
FOREGROUND_INTENSITY = 0x0008 # foreground color is intensified. | |
# BACKGROUND_BLACK = 0x0000 | |
# BACKGROUND_BLUE = 0x0010 | |
# BACKGROUND_GREEN = 0x0020 | |
# BACKGROUND_CYAN = 0x0030 | |
# BACKGROUND_RED = 0x0040 | |
# BACKGROUND_MAGENTA = 0x0050 | |
BACKGROUND_YELLOW = 0x0060 | |
# BACKGROUND_GREY = 0x0070 | |
BACKGROUND_INTENSITY = 0x0080 # background color is intensified. | |
levelno = args[1].levelno | |
if (levelno >= 50): | |
color = BACKGROUND_YELLOW | FOREGROUND_RED | FOREGROUND_INTENSITY | BACKGROUND_INTENSITY | |
elif (levelno >= 40): | |
color = FOREGROUND_RED | FOREGROUND_INTENSITY | |
elif (levelno >= 30): | |
color = FOREGROUND_YELLOW | FOREGROUND_INTENSITY | |
elif (levelno >= 20): | |
color = FOREGROUND_GREEN | |
elif (levelno >= 10): | |
color = FOREGROUND_MAGENTA | |
else: | |
color = FOREGROUND_WHITE | |
args[0]._set_color(color) | |
ret = fn(*args) | |
args[0]._set_color(FOREGROUND_WHITE) | |
# print "after" | |
return ret | |
return new | |
def add_coloring_to_emit_ansi(fn): | |
# add methods we need to the class | |
def new(*args): | |
levelno = args[1].levelno | |
if (levelno >= 50): | |
color = '\x1b[31m' # red | |
elif (levelno >= 40): | |
color = '\x1b[31m' # red | |
elif (levelno >= 30): | |
color = '\x1b[33m' # yellow | |
elif (levelno >= 20): | |
color = '\x1b[32m' # green | |
elif (levelno >= 10): | |
color = '\x1b[35m' # pink | |
else: | |
color = '\x1b[0m' # normal | |
args[1].msg = color + args[1].msg + '\x1b[0m' # normal | |
# print "after" | |
return fn(*args) | |
return new | |
if platform.system() == 'Windows': | |
# Windows does not support ANSI escapes and we are using API calls to set the console color | |
logging.StreamHandler.emit = add_coloring_to_emit_windows(logging.StreamHandler.emit) | |
else: | |
# all non-Windows platforms are supporting ANSI escapes so we use them | |
logging.StreamHandler.emit = add_coloring_to_emit_ansi(logging.StreamHandler.emit) | |
# log = logging.getLogger() | |
# log.addFilter(log_filter()) | |
# //hdlr = logging.StreamHandler() | |
# //hdlr.setFormatter(formatter()) | |