File size: 2,340 Bytes
e65937c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | """Clean logging utilities for data generation pipeline."""
import logging
import sys
from typing import Any
__all__ = ["PipelineLogger"]
class PipelineLogger:
"""Simple logger with clean output."""
def __init__(self, name: str = ""):
self.logger = logging.getLogger(name)
self.use_colors = sys.stdout.isatty()
def _color(self, text: str, code: str) -> str:
"""Apply ANSI color if terminal supports it."""
return f"{code}{text}\033[0m" if self.use_colors else text
def section(self, title: str):
"""Print a major section header."""
line = "━" * (len(title) + 4)
blue_bold = "\033[1;34m"
colored_line = self._color(line, blue_bold)
colored_title = self._color(f" {title}", blue_bold)
self.logger.info("%s", colored_line)
self.logger.info("%s", colored_title)
self.logger.info("%s", colored_line)
def subsection(self, title: str):
"""Print a subsection header."""
bold = "\033[1m"
self.logger.info("\n%s", self._color(f"▸ {title}", bold))
def config(self, config_dict: dict[str, Any]):
"""Print configuration in aligned format."""
if not config_dict:
return
dim = "\033[2m"
max_key_len = max(len(str(k)) for k in config_dict)
for key, value in config_dict.items():
key_str = str(key).ljust(max_key_len)
colored_key = self._color(key_str, dim)
self.logger.info(" %s │ %s", colored_key, value)
def info(self, message: str):
"""Print info message."""
self.logger.info(" %s", message)
def success(self, message: str):
"""Print success message."""
green = "\033[92m"
self.logger.info(" %s %s", self._color("✓", green), message)
def warning(self, message: str):
"""Print warning message."""
yellow = "\033[93m"
self.logger.warning(" %s %s", self._color("⚠", yellow), message)
def error(self, message: str):
"""Print error message."""
red = "\033[91m"
self.logger.error(" %s %s", self._color("✗", red), message)
def debug(self, message: str):
"""Print debug message (dimmed)."""
dim = "\033[2m"
self.logger.debug("%s", self._color(f" {message}", dim))
|