Skip to content

Commit 70caf2d

Browse files
authored
Merge pull request #649 from xcp-ng/gln/tools-colored-logging-vtzs
Add colored logging to tools CLI
2 parents d0d1469 + 383e477 commit 70caf2d

2 files changed

Lines changed: 42 additions & 3 deletions

File tree

lib/logger.py

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