KiBot/kiplot/log.py

79 lines
1.9 KiB
Python

"""Log module
Handles logging initialization and formating.
"""
import sys
import logging
# Default domain, base name for the tool
domain = 'kilog'
def get_logger(name=None):
"""Get a module for a submodule or the root logger if no name is
provided"""
if name:
return logging.getLogger(domain+'.'+name)
return logging.getLogger(domain)
def set_domain(name):
"""Set the base name for the tool"""
global domain
domain = name
def init(verbose, quiet):
"""Initialize the logging feature using a custom format and the specified
verbosity level"""
log_level = logging.INFO
if verbose:
log_level = logging.DEBUG
if quiet:
log_level = logging.WARNING
logger = get_logger()
logger.setLevel(log_level)
ch = logging.StreamHandler()
ch.setFormatter(CustomFormatter())
logger.addHandler(ch)
return logger
class CustomFormatter(logging.Formatter):
"""Logging Formatter to add colors"""
if sys.stderr.isatty():
grey = "\x1b[38;21m"
yellow = "\x1b[93;1m"
red = "\x1b[91;1m"
bold_red = "\x1b[91;21m"
cyan = "\x1b[36;1m"
reset = "\x1b[0m"
else:
grey = ""
yellow = ""
red = ""
bold_red = ""
cyan = ""
reset = ""
# format = "%(asctime)s - %(name)s - %(levelname)s - %(message)s "
# "(%(filename)s:%(lineno)d)"
format = "%(levelname)s:%(message)s (%(name)s - %(filename)s:%(lineno)d)"
format_simple = "%(message)s"
FORMATS = {
logging.DEBUG: cyan + format + reset,
logging.INFO: grey + format_simple + reset,
logging.WARNING: yellow + format + reset,
logging.ERROR: red + format + reset,
logging.CRITICAL: bold_red + format + reset
}
def format(self, record):
log_fmt = self.FORMATS.get(record.levelno)
formatter = logging.Formatter(log_fmt)
return formatter.format(record)