From 3c03688544caf11fe7db591c81781f703ec3bae4 Mon Sep 17 00:00:00 2001 From: Untone Date: Tue, 20 Feb 2024 19:33:24 +0300 Subject: [PATCH] logger-3000 --- server.py | 5 +++-- services/logger.py | 48 ++++++++++++++++++++++++++++++++-------------- 2 files changed, 37 insertions(+), 16 deletions(-) diff --git a/server.py b/server.py index b33c8c91..4f4bcee7 100644 --- a/server.py +++ b/server.py @@ -1,8 +1,9 @@ from granian.constants import Interfaces from granian.server import Granian +from services.logger import root_logger as logger if __name__ == '__main__': - print('[server] started') + logger.info('started') granian_instance = Granian( 'main:app', @@ -10,6 +11,6 @@ if __name__ == '__main__': port=8000, threads=4, websockets=False, - interface=Interfaces.ASGI, + interface=Interfaces.ASGI ) granian_instance.serve() diff --git a/services/logger.py b/services/logger.py index 0cdf2458..76761b02 100644 --- a/services/logger.py +++ b/services/logger.py @@ -1,7 +1,6 @@ import logging import colorlog - # Define the color scheme color_scheme = { 'DEBUG': 'light_black', @@ -19,20 +18,42 @@ secondary_colors = { 'module': {'DEBUG': 'light_black,bg_blue'}, } +# Define the log format string +fmt_string = "%(log_color)s%(levelname)s: %(log_color)s[%(module)s]%(reset)s %(white)s%(message)s" + +# Define formatting configuration +fmt_config = { + 'log_colors': color_scheme, + 'secondary_log_colors': secondary_colors, + 'style': '%', + 'reset': True +} + # Create a ColoredFormatter object for colorized logging -formatter = colorlog.ColoredFormatter( - "%(log_color)s%(levelname)s: %(log_color)s[%(module)s]%(reset)s %(white)s%(message)s", - log_colors=color_scheme, - secondary_log_colors=secondary_colors, # Set secondary log colors - style='%', - reset=True -) +formatter = colorlog.ColoredFormatter(fmt_string, **fmt_config) + + +class MultilineColoredFormatter(colorlog.ColoredFormatter): + def format(self, record): + # Check if the message is multiline + if record.getMessage() and '\n' in record.getMessage(): + # Split the message into lines + lines = record.getMessage().split('\n') + formatted_lines = [] + for line in lines: + # Format each line with the provided format + formatted_lines.append(super().format(record, line)) + # Join the formatted lines + return '\n'.join(formatted_lines) + else: + # If not multiline or no message, use the default formatting + return super().format(record) + def get_colorful_logger(name='main'): - # Create a stream handler for logging output stream = logging.StreamHandler() - stream.setFormatter(formatter) + stream.setFormatter(MultilineColoredFormatter(fmt_string, **fmt_config)) # Create and configure the logger logger = logging.getLogger(name) @@ -41,8 +62,7 @@ def get_colorful_logger(name='main'): return logger +# Set up the root logger with the same formatting root_logger = logging.getLogger() -root_logger.setLevel(logging.DEBUG) # Set the log level -stream_handler = logging.StreamHandler() -stream_handler.setFormatter(formatter) -root_logger.addHandler(stream_handler) +root_logger.setLevel(logging.DEBUG) +root_logger.addHandler(logging.StreamHandler())