Sometimes, you just want to color the output of the logging package in Python.
Here's a simple custom formatter which shows how this can be done:
1import logging
2
3class ColorFormatter(logging.Formatter):
4 """Logging Formatter to add colors and count warning / errors"""
5
6 grey = "\x1b[90m"
7 green = "\x1b[92m"
8 yellow = "\x1b[93m"
9 red = "\x1b[91m"
10 reset = "\x1b[0m"
11 format = "%(asctime)s | %(levelname)-5.5s | %(message)s"
12
13 FORMATS = {
14 logging.DEBUG: grey + format + reset,
15 logging.INFO: green + format + reset,
16 logging.WARNING: yellow + format + reset,
17 logging.ERROR: red + format + reset,
18 logging.CRITICAL: red + format + reset
19 }
20
21 def format(self, record):
22 record.levelname = 'WARN' if record.levelname == 'WARNING' else record.levelname
23 record.levelname = 'ERROR' if record.levelname == 'CRITICAL' else record.levelname
24 log_fmt = self.FORMATS.get(record.levelno)
25 formatter = logging.Formatter(log_fmt)
26 return formatter.format(record)
27
28def configure_logging():
29
30 logger = logging.getLogger()
31 logger.setLevel(logging.DEBUG)
32
33 ch = logging.StreamHandler()
34 ch.setLevel(logging.DEBUG)
35 ch.setFormatter(ColorFormatter())
36 logger.addHandler(ch)
37
38def main():
39
40 configure_logging()
41
42 logging.debug("debug message")
43 logging.info("info message")
44 logging.warning("warning message")
45 logging.error("error message")
46 logging.critical("critical message")
47
48if __name__ == "__main__":
49 main()
If this post was enjoyable or useful for you, please share it! If you have comments, questions, or feedback, you can email my personal email. To get new posts, subscribe use the RSS feed.