core/services/logger.py

73 lines
2.1 KiB
Python
Raw Normal View History

2024-02-21 11:23:42 +00:00
import logging
2024-04-23 12:15:18 +00:00
2024-02-21 11:23:42 +00:00
import colorlog
# Define the color scheme
color_scheme = {
2024-04-23 11:41:19 +00:00
"DEBUG": "cyan",
2024-04-17 15:32:23 +00:00
"INFO": "green",
"WARNING": "yellow",
"ERROR": "red",
"CRITICAL": "red,bg_white",
2024-04-23 12:14:59 +00:00
"DEFAULT": "white",
2024-02-21 11:23:42 +00:00
}
# Define secondary log colors
secondary_colors = {
2024-04-17 15:32:23 +00:00
"log_name": {"DEBUG": "blue"},
"asctime": {"DEBUG": "cyan"},
"process": {"DEBUG": "purple"},
2024-04-23 11:41:19 +00:00
"module": {"DEBUG": "cyan,bg_blue"},
2024-04-23 12:14:59 +00:00
"funcName": {"DEBUG": "light_white,bg_blue"},
2024-02-21 11:23:42 +00:00
}
# Define the log format string
2024-04-17 15:32:23 +00:00
fmt_string = "%(log_color)s%(levelname)s: %(log_color)s[%(module)s.%(funcName)s]%(reset)s %(white)s%(message)s"
2024-02-21 11:23:42 +00:00
# Define formatting configuration
fmt_config = {
2024-04-17 15:32:23 +00:00
"log_colors": color_scheme,
"secondary_log_colors": secondary_colors,
"style": "%",
"reset": True,
2024-02-21 11:23:42 +00:00
}
2024-03-03 13:59:15 +00:00
2024-02-21 11:23:42 +00:00
class MultilineColoredFormatter(colorlog.ColoredFormatter):
2024-03-12 15:14:34 +00:00
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
2024-04-17 15:32:23 +00:00
self.log_colors = kwargs.pop("log_colors", {})
self.secondary_log_colors = kwargs.pop("secondary_log_colors", {})
2024-03-12 15:14:34 +00:00
2024-02-21 11:23:42 +00:00
def format(self, record):
2024-03-12 14:40:55 +00:00
message = record.getMessage()
2024-04-17 15:32:23 +00:00
if "\n" in message:
lines = message.split("\n")
2024-03-12 15:27:58 +00:00
first_line = lines[0]
record.message = first_line
formatted_first_line = super().format(record)
formatted_lines = [formatted_first_line]
2024-03-12 14:40:55 +00:00
for line in lines[1:]:
2024-03-12 15:27:58 +00:00
formatted_lines.append(line)
2024-04-17 15:32:23 +00:00
return "\n".join(formatted_lines)
2024-02-21 11:23:42 +00:00
else:
return super().format(record)
2024-03-12 15:17:28 +00:00
2024-02-21 11:23:42 +00:00
# Create a MultilineColoredFormatter object for colorized logging
formatter = MultilineColoredFormatter(fmt_string, **fmt_config)
# Create a stream handler for logging output
stream = logging.StreamHandler()
stream.setFormatter(formatter)
# Set up the root logger with the same formatting
root_logger = logging.getLogger()
root_logger.setLevel(logging.DEBUG)
root_logger.addHandler(stream)
2024-03-11 08:16:12 +00:00
2024-06-04 05:10:57 +00:00
ignore_logs = ["_trace", "httpx", "_client", "_trace.atrace", "aiohttp", "_client", "base"]
2024-03-11 08:16:12 +00:00
for lgr in ignore_logs:
loggr = logging.getLogger(lgr)
loggr.setLevel(logging.INFO)