iptv/M3U8/scrapers/utils/logger.py

51 lines
1.2 KiB
Python
Raw Normal View History

2025-09-17 22:52:40 -04:00
import logging
from pathlib import Path
LOG_FMT = (
"[%(asctime)s] "
"%(levelname)-8s "
"[%(name)s] "
"%(message)-70s "
"(%(filename)s:%(lineno)d)"
)
COLORS = {
2025-10-01 11:57:49 -04:00
"DEBUG": "\033[36m",
2025-09-17 22:52:40 -04:00
"INFO": "\033[32m",
"WARNING": "\033[33m",
"ERROR": "\033[31m",
2025-10-01 11:57:49 -04:00
"CRITICAL": "\033[1;41m",
2025-09-17 22:52:40 -04:00
"reset": "\033[0m",
}
class ColorFormatter(logging.Formatter):
def format(self, record) -> str:
2025-10-01 11:57:49 -04:00
color = COLORS.get(record.levelname, COLORS["reset"])
2025-09-17 22:52:40 -04:00
levelname = record.levelname
2025-10-01 11:57:49 -04:00
record.levelname = f"{color}{levelname:<8}{COLORS['reset']}"
2025-09-17 22:52:40 -04:00
formatted = super().format(record)
record.levelname = levelname
2025-10-01 11:57:49 -04:00
2025-09-17 22:52:40 -04:00
return formatted
def get_logger(name: str | None = None) -> logging.Logger:
if not name:
name = Path(__file__).stem
logger = logging.getLogger(name)
if not logger.hasHandlers():
handler = logging.StreamHandler()
formatter = ColorFormatter(LOG_FMT, datefmt="%Y-%m-%d | %H:%M:%S")
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.setLevel(logging.INFO)
2025-10-01 11:57:49 -04:00
logger.propagate = False
2025-09-17 22:52:40 -04:00
return logger
2025-10-01 11:57:49 -04:00
__all__ = ["get_logger", "ColorFormatter"]