diff --git a/app/logger.py b/app/logger.py index 4ca0ea88e..6be6e9637 100644 --- a/app/logger.py +++ b/app/logger.py @@ -1,9 +1,15 @@ import logging from logging.handlers import MemoryHandler from collections import deque +from rich import pretty +from rich.theme import Theme +from rich.console import Console +from rich.logging import RichHandler + logs = None -formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") +LOGFMT = "%(asctime)s %(levelname)s [%(filename)s:%(lineno)s] %(message)s" +formatter = logging.Formatter(LOGFMT) def get_logs(): @@ -19,8 +25,7 @@ def setup_logger(log_level: str = 'INFO', capacity: int = 300): logger = logging.getLogger() logger.setLevel(log_level) - stream_handler = logging.StreamHandler() - stream_handler.setFormatter(logging.Formatter("%(message)s")) + stream_handler = get_rich_hander(log_level) logger.addHandler(stream_handler) # Create a memory handler with a deque as its buffer @@ -29,3 +34,30 @@ def setup_logger(log_level: str = 'INFO', capacity: int = 300): memory_handler.buffer = logs memory_handler.setFormatter(formatter) logger.addHandler(memory_handler) + +def get_rich_hander(log_level: str = "INFO") -> RichHandler: + console = Console( + log_time=True, + log_time_format="%Y-%m-%d %H:%M:%S", + theme=Theme({ + "log.time": "green", + "inspect.value.border": "black", + "traceback.border": "black", + "traceback.border.syntax_error": "black", + }), + ) + + pretty.install(console=console) + handler = RichHandler( + console=console, + level=log_level, + markup=False, + show_time=True, + show_level=True, + show_path=True, + rich_tracebacks=True, + enable_link_path=False, + omit_repeated_times=False, + log_time_format="%Y-%m-%d %H:%M:%S", + ) + return handler