llmOS-Agent / src /log.py
tech-envision
Add configurable database path and log level
db26769
from __future__ import annotations
import logging
import os
from typing import Final
from colorama import Fore, Style, init as colorama_init
__all__: Final[list[str]] = ["get_logger"]
class _ColourFormatter(logging.Formatter):
_COLOUR_FOR_LEVEL = {
logging.DEBUG: Fore.CYAN,
logging.INFO: Fore.GREEN,
logging.WARNING: Fore.YELLOW,
logging.ERROR: Fore.RED,
logging.CRITICAL: Fore.MAGENTA,
}
def format(self, record: logging.LogRecord) -> str: # noqa: D401
colour = self._COLOUR_FOR_LEVEL.get(record.levelno, "")
return f"{colour}{super().format(record)}{Style.RESET_ALL}"
def get_logger(name: str | None = None, level: int | None = None) -> logging.Logger:
"""Return a configured logger instance."""
colorama_init()
env_level = os.getenv("LOG_LEVEL", "INFO").upper()
if level is None:
level = getattr(logging, env_level, logging.INFO)
handler = logging.StreamHandler()
handler.setFormatter(
_ColourFormatter("%(asctime)s [%(levelname)s] %(name)s: %(message)s")
)
logger = logging.getLogger(name)
logger.setLevel(level)
logger.handlers.clear()
logger.addHandler(handler)
return logger