Logging in Python: My Best Practice
Use Python's standard logging library.
While using py.logging, I usually wrap a function like this:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import logging
def get_logger(name: str) -> logging.Logger:
logger = logging.getLogger(name)
logger.propagate = False
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.DEBUG)
class CustomFormatter(logging.Formatter):
grey = "\x1b[38;20m"
yellow = "\x1b[33;20m"
red = "\x1b[31;20m"
bold_red = "\x1b[31;1m"
reset = "\x1b[0m"
format_str = "[{asctime} | {name} | L{lineno} | {levelname}] {message}"
FORMATS = {
logging.DEBUG: grey + format_str + reset,
logging.INFO: grey + format_str + reset,
logging.WARNING: yellow + format_str + reset,
logging.ERROR: red + format_str + reset,
logging.CRITICAL: bold_red + format_str + reset,
}
def format(self, record: logging.LogRecord):
log_fmt = self.FORMATS.get(record.levelno)
formatter = logging.Formatter(
log_fmt,
datefmt="%Y-%m-%d %H:%M:%S",
style="{",
)
return formatter.format(record)
stream_handler.setFormatter(CustomFormatter())
logger.addHandler(stream_handler)
return logger
About the colors in console: see Terminal Colors | Chris Yeh (chrisyeh96.github.io).
This post is licensed under CC BY 4.0 by the author.