Coverage for cfg_checker/common/log.py : 96%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1import logging
2import os
4pkg_dir = os.path.dirname(__file__)
5pkg_dir = os.path.join(pkg_dir, os.pardir, os.pardir)
6pkg_dir = os.path.normpath(pkg_dir)
7pkg_dir = os.path.abspath(pkg_dir)
10def color_me(color):
11 RESET_SEQ = "\033[0m"
12 COLOR_SEQ = "\033[1;%dm"
14 color_seq = COLOR_SEQ % (30 + color)
16 def closure(msg):
17 return color_seq + msg + RESET_SEQ
18 return closure
21class ColoredFormatter(logging.Formatter):
22 BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(8)
24 colors = {
25 'INFO': color_me(WHITE),
26 'WARNING': color_me(YELLOW),
27 'DEBUG': color_me(BLUE),
28 'CRITICAL': color_me(YELLOW),
29 'ERROR': color_me(RED)
30 }
32 def __init__(self, msg, use_color=True, datefmt=None):
33 logging.Formatter.__init__(self, msg, datefmt=datefmt)
34 self.use_color = use_color
36 def format(self, record):
37 orig = record.__dict__
38 record.__dict__ = record.__dict__.copy()
39 levelname = record.levelname
41 prn_name = levelname + ' ' * (8 - len(levelname))
42 if levelname in self.colors:
43 record.levelname = self.colors[levelname](prn_name)
44 else:
45 record.levelname = prn_name
47 # super doesn't work here in 2.6 O_o
48 res = logging.Formatter.format(self, record)
50 # res = super(ColoredFormatter, self).format(record)
52 # restore record, as it will be used by other formatters
53 record.__dict__ = orig
54 return res
57def setup_loggers(name, def_level=logging.DEBUG, log_fname=None):
59 # Stream Handler
60 sh = logging.StreamHandler()
61 sh.setLevel(def_level)
62 log_format = '%(message)s'
63 colored_formatter = ColoredFormatter(log_format, datefmt="%H:%M:%S")
64 sh.setFormatter(colored_formatter)
66 # File handler
67 if log_fname is not None:
68 fh = logging.FileHandler(log_fname)
69 log_format = '%(asctime)s - %(levelname)8s - %(name)-15s - %(message)s'
70 formatter = logging.Formatter(log_format, datefmt="%H:%M:%S")
71 fh.setFormatter(formatter)
72 fh.setLevel(logging.DEBUG)
73 else:
74 fh = None
76 logger = logging.getLogger(name)
77 logger.setLevel(logging.DEBUG)
78 if len(logger.handlers) == 0:
79 logger.addHandler(fh)
81 logger_cli = logging.getLogger(name + ".cli")
82 logger_cli.setLevel(logging.INFO)
83 if len(logger_cli.handlers) == 0:
84 logger_cli.addHandler(sh)
86 return logger, logger_cli
89# init instances of logger to be used by all other modules
90logger, logger_cli = setup_loggers(
91 'cfg_checker',
92 log_fname=os.path.join(
93 pkg_dir,
94 os.getenv('LOGFILE', 'cfg_checker.log')
95 )
96)