gregorkrzmanc's picture
.
e75a247
raw
history blame
2.56 kB
import logging
import sys
import os
from functools import lru_cache
def _configLogger(name, stdout=sys.stdout, filename=None, loglevel=logging.INFO):
# define a Handler which writes INFO messages or higher to the sys.stdout
logger = logging.getLogger(name)
logger.setLevel(loglevel)
if stdout:
console = logging.StreamHandler(stdout)
console.setLevel(loglevel)
console.setFormatter(logging.Formatter('[%(asctime)s] %(levelname)s: %(message)s'))
logger.addHandler(console)
if filename:
dirname = os.path.dirname(filename)
if dirname and not os.path.exists(dirname):
os.makedirs(os.path.dirname(filename))
logfile = logging.FileHandler(filename)
logfile.setLevel(loglevel)
logfile.setFormatter(logging.Formatter('[%(asctime)s] %(levelname)s: %(message)s'))
logger.addHandler(logfile)
class ColoredLogger():
color_dict = {
'black': '\033[0;30m',
'red': '\033[0;31m',
'green': '\033[0;32m',
'orange': '\033[0;33m',
'blue': '\033[0;34m',
'purple': '\033[0;35m',
'cyan': '\033[0;36m',
'lightgray': '\033[0;37m',
'darkgray': '\033[1;30m',
'lightred': '\033[1;31m',
'lightgreen': '\033[1;32m',
'yellow': '\033[1;33m',
'lightblue': '\033[1;34m',
'lightpurple': '\033[1;35m',
'lightcyan': '\033[1;36m',
'white': '\033[1;37m',
'bold': '\033[1m',
'endcolor': '\033[0m',
}
def __init__(self, name):
self.logger = logging.getLogger(name)
def colorize(self, msg, color):
return self.color_dict[color] + msg + self.color_dict['endcolor']
def debug(self, msg, *args, color=None, **kwargs):
if color:
msg = self.colorize(msg, color)
self.logger.debug(msg, *args, **kwargs)
def info(self, msg, *args, color=None, **kwargs):
if color:
msg = self.colorize(msg, color)
self.logger.info(msg, *args, **kwargs)
def warning(self, msg, *args, color=None, **kwargs):
if color:
msg = self.colorize(msg, color)
self.logger.warning(msg, *args, **kwargs)
def error(self, msg, *args, color=None, **kwargs):
if color:
msg = self.colorize(msg, color)
self.logger.error(msg, *args, **kwargs)
_logger = ColoredLogger('weaver')
@lru_cache(10)
def warn_once(msg, logger=_logger):
# Keep track of 10 different messages and then warn again
logger.warning(msg)