From a877a809178a3fce9d1e8842b335e70adaa0f8ac Mon Sep 17 00:00:00 2001 From: saurabh Date: Tue, 28 Oct 2025 16:11:12 +0530 Subject: [PATCH] Fixed ANSI color codes per review feedback Updated WARNING and ERROR codes to use the correct foreground colors. Added Wikipedia reference comment above COLORS. --- scripts/shared.py | 45 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 42 insertions(+), 3 deletions(-) diff --git a/scripts/shared.py b/scripts/shared.py index 3294a381..92db73c9 100644 --- a/scripts/shared.py +++ b/scripts/shared.py @@ -1,6 +1,7 @@ # Standard library import logging import os +import sys from datetime import datetime, timezone # Third-party @@ -128,12 +129,50 @@ def paths_update(logger, paths, old_quarter, new_quarter): return paths +class ColoredFormatter(logging.Formatter): + """Adds colors to log messages.""" + # https://en.wikipedia.org/wiki/ANSI_escape_code#3-bit_and_4-bit + COLORS = { + logging.DEBUG: "\033[90m", # bright black + logging.INFO: "\033[37m", # white + logging.WARNING: "\033[93m", # bright yellow + logging.ERROR: "\033[91m", # bright red + logging.CRITICAL: "\033[31m", # red + } + RESET = "\033[0m" + + def format(self, record): + message = super().format(record) + color = self.COLORS.get(record.levelno, "") + if color: + return f"{color}{message}{self.RESET}" + return message + + def setup(current_file): # Set up logging - logging.basicConfig( - level=logging.INFO, - format="%(asctime)s - %(levelname)s - %(module)s - %(message)s", + root = logging.getLogger() + root.handlers.clear() + root.setLevel(logging.INFO) + + formatter = ColoredFormatter( + "%(asctime)s - %(levelname)s - %(module)s - %(message)s" ) + + # Info/warning to stdout + stdout_handler = logging.StreamHandler(sys.stdout) + stdout_handler.setLevel(logging.DEBUG) + stdout_handler.setFormatter(formatter) + stdout_handler.addFilter(lambda r: r.levelno < logging.ERROR) + + # Errors to stderr + stderr_handler = logging.StreamHandler(sys.stderr) + stderr_handler.setLevel(logging.ERROR) + stderr_handler.setFormatter(formatter) + + root.addHandler(stdout_handler) + root.addHandler(stderr_handler) + logger = logging.getLogger(__name__) # Datetime