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

1"""Logging helpers for event_normalizer.""" 

2 

3import logging 

4import sys 

5 

6 

7class ColoredFormatter(logging.Formatter): 

8 """ANSI-colored formatter for terminal logging.""" 

9 

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" 

18 

19 def format(self, record: logging.LogRecord) -> str: 

20 formatted = super().format(record) 

21 

22 if not sys.stderr.isatty(): 

23 return formatted 

24 

25 color = self.COLORS.get(record.levelno, "") 

26 return f"{color}{formatted}{self.RESET}" 

27 

28 

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 

34 

35 if package_logger.handlers: 

36 return 

37 

38 handler = logging.StreamHandler() 

39 handler.setLevel(level) 

40 

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 ) 

47 

48 package_logger.addHandler(handler)