Skip to content

Commit 3a92673

Browse files
committed
Move colored logging helper to lib/logger.py
Extract the ColoredFormatter and setup_colored_logging helpers added to the tools package into a dedicated lib/logger.py module, so they can be reused outside of lib/tools. lib/tools/__init__.py now imports setup_colored_logging from lib.logger. Signed-off-by: Gaëtan Lehmann <gaetan.lehmann@vates.tech>
1 parent 2be0026 commit 3a92673

2 files changed

Lines changed: 43 additions & 3 deletions

File tree

lib/logger.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
"""Colored logging utilities."""
2+
3+
import logging
4+
5+
6+
class ColoredFormatter(logging.Formatter):
7+
"""A logging formatter that adds ANSI color codes to log levels."""
8+
9+
# ANSI color codes matching pytest's colors
10+
COLORS = {
11+
logging.CRITICAL: "\033[91m", # Red
12+
logging.ERROR: "\033[91m", # Red
13+
logging.WARNING: "\033[93m", # Yellow
14+
logging.INFO: "\033[92m", # Green
15+
logging.DEBUG: "\033[95m", # Magenta/Purple
16+
}
17+
RESET = "\033[0m"
18+
19+
def format(self, record: logging.LogRecord) -> str:
20+
color = self.COLORS.get(record.levelno, "")
21+
original_levelname = record.levelname
22+
if color:
23+
record.levelname = f'{color}{record.levelname}{self.RESET}'
24+
result = super().format(record)
25+
record.levelname = original_levelname
26+
return result
27+
28+
29+
def setup_colored_logging(level: int = logging.INFO) -> None:
30+
"""Set up logging with colored formatter."""
31+
logger = logging.getLogger()
32+
logger.setLevel(level)
33+
for handler in logger.handlers[:]:
34+
logger.removeHandler(handler)
35+
handler = logging.StreamHandler()
36+
formatter = ColoredFormatter(
37+
fmt="%(asctime)s.%(msecs)03d %(levelname)s %(message)s", datefmt="%b %d %H:%M:%S"
38+
)
39+
handler.setFormatter(formatter)
40+
logger.addHandler(handler)

lib/tools/__init__.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import logging
99

10+
from lib.logger import setup_colored_logging
11+
1012
logger = logging.getLogger()
11-
logging.basicConfig(
12-
format="%(asctime)s.%(msecs)03d %(levelname)s %(message)s", datefmt="%b %d %H:%M:%S", level=logging.INFO
13-
)
13+
setup_colored_logging()

0 commit comments

Comments
 (0)