blob: d1f053c2011a9626bc2528b72ab2a6f6313d8a6d [file] [log] [blame]
Alex0989ecf2022-03-29 13:43:21 -05001# Author: Alex Savatieiev (osavatieiev@mirantis.com; a.savex@gmail.com)
2# Copyright 2019-2022 Mirantis, Inc.
savex4448e132018-04-25 15:51:14 +02003import logging
Alex3ebc5632019-04-18 16:47:18 -05004import os
savex4448e132018-04-25 15:51:14 +02005
Alex Savatieiev5118de02019-02-20 15:50:42 -06006pkg_dir = os.path.dirname(__file__)
7pkg_dir = os.path.join(pkg_dir, os.pardir, os.pardir)
8pkg_dir = os.path.normpath(pkg_dir)
9pkg_dir = os.path.abspath(pkg_dir)
10
savex4448e132018-04-25 15:51:14 +020011
12def color_me(color):
13 RESET_SEQ = "\033[0m"
14 COLOR_SEQ = "\033[1;%dm"
15
16 color_seq = COLOR_SEQ % (30 + color)
17
18 def closure(msg):
19 return color_seq + msg + RESET_SEQ
20 return closure
21
22
23class ColoredFormatter(logging.Formatter):
24 BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(8)
25
26 colors = {
27 'INFO': color_me(WHITE),
28 'WARNING': color_me(YELLOW),
29 'DEBUG': color_me(BLUE),
30 'CRITICAL': color_me(YELLOW),
31 'ERROR': color_me(RED)
32 }
33
34 def __init__(self, msg, use_color=True, datefmt=None):
35 logging.Formatter.__init__(self, msg, datefmt=datefmt)
36 self.use_color = use_color
37
38 def format(self, record):
39 orig = record.__dict__
40 record.__dict__ = record.__dict__.copy()
41 levelname = record.levelname
42
43 prn_name = levelname + ' ' * (8 - len(levelname))
44 if levelname in self.colors:
45 record.levelname = self.colors[levelname](prn_name)
46 else:
47 record.levelname = prn_name
48
49 # super doesn't work here in 2.6 O_o
50 res = logging.Formatter.format(self, record)
51
52 # res = super(ColoredFormatter, self).format(record)
53
54 # restore record, as it will be used by other formatters
55 record.__dict__ = orig
56 return res
57
58
59def setup_loggers(name, def_level=logging.DEBUG, log_fname=None):
60
61 # Stream Handler
62 sh = logging.StreamHandler()
63 sh.setLevel(def_level)
64 log_format = '%(message)s'
65 colored_formatter = ColoredFormatter(log_format, datefmt="%H:%M:%S")
66 sh.setFormatter(colored_formatter)
67
68 # File handler
69 if log_fname is not None:
70 fh = logging.FileHandler(log_fname)
71 log_format = '%(asctime)s - %(levelname)8s - %(name)-15s - %(message)s'
72 formatter = logging.Formatter(log_format, datefmt="%H:%M:%S")
73 fh.setFormatter(formatter)
74 fh.setLevel(logging.DEBUG)
75 else:
76 fh = None
77
78 logger = logging.getLogger(name)
79 logger.setLevel(logging.DEBUG)
80 if len(logger.handlers) == 0:
81 logger.addHandler(fh)
82
83 logger_cli = logging.getLogger(name + ".cli")
Alex Savatieiev799bee32019-02-20 17:19:26 -060084 logger_cli.setLevel(logging.INFO)
savex4448e132018-04-25 15:51:14 +020085 if len(logger_cli.handlers) == 0:
86 logger_cli.addHandler(sh)
87
88 return logger, logger_cli
Alex Savatieiev5118de02019-02-20 15:50:42 -060089
Alex3ebc5632019-04-18 16:47:18 -050090
Alex Savatieiev5118de02019-02-20 15:50:42 -060091# init instances of logger to be used by all other modules
92logger, logger_cli = setup_loggers(
93 'cfg_checker',
94 log_fname=os.path.join(
95 pkg_dir,
Alex9a4ad212020-10-01 18:04:25 -050096 os.getenv('MCP_LOGFILE', 'cfg_checker.log')
Alex Savatieiev5118de02019-02-20 15:50:42 -060097 )
98)