Coverage for event_normalizer/logging_utils.py: 100%
21 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-21 20:04 +0000
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-21 20:04 +0000
1"""Logging helpers for event_normalizer."""
3import logging
4import sys
7class ColoredFormatter(logging.Formatter):
8 """ANSI-colored formatter for terminal logging."""
10 COLORS = {
11 logging.DEBUG: "\033[36m", # cyan
12 logging.INFO: "\033[32m", # green
13 logging.WARNING: "\033[33m", # yellow
14 logging.ERROR: "\033[31m", # red
15 logging.CRITICAL: "\033[1;31m", # bold red
16 }
17 RESET = "\033[0m"
19 def format(self, record: logging.LogRecord) -> str:
20 formatted = super().format(record)
22 if not sys.stderr.isatty():
23 return formatted
25 color = self.COLORS.get(record.levelno, "")
26 return f"{color}{formatted}{self.RESET}"
29def configure_logging(level: int = logging.INFO) -> None:
30 """Configure colored console logging for event_normalizer."""
31 package_logger = logging.getLogger("event_normalizer")
32 package_logger.setLevel(level)
33 package_logger.propagate = False
35 if package_logger.handlers:
36 return
38 handler = logging.StreamHandler()
39 handler.setLevel(level)
41 handler.setFormatter(
42 ColoredFormatter(
43 fmt="%(asctime)s | %(levelname)-8s | %(name)s | %(message)s",
44 datefmt="%Y-%m-%d %H:%M:%S",
45 )
46 )
48 package_logger.addHandler(handler)