gmass-demo / core /logger.py
kofi-scholar's picture
refactor: update application branding, error formatting, and licensing
d262a06
Raw History Blame
1.53 kB
"""
logger.py - rotating logger for G-MASS evaluation runs.
MediSafe-GH · Biomedical Technologies Lab
"""
import logging
import os
from logging.handlers import RotatingFileHandler
LOG_DIR = os.getenv("GMASS_LOG_DIR", "logs")
LOG_FILE = os.path.join(LOG_DIR, "gmass_eval.log")
LOG_FMT = "%(asctime)s [%(levelname)s] %(name)s - %(message)s"
DATE_FMT = "%Y-%m-%dT%H:%M:%S"
def get_logger(name: str) -> logging.Logger:
"""
Return a named logger that writes to both console and a rotating log file.
Safe to call multiple times with the same name - returns the same logger.
Args:
name: typically __name__ of the calling module.
Returns:
Configured logging.Logger instance.
"""
logger = logging.getLogger(name)
if logger.handlers:
return logger
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter(LOG_FMT, datefmt=DATE_FMT)
console = logging.StreamHandler()
console.setLevel(logging.INFO)
console.setFormatter(formatter)
logger.addHandler(console)
try:
os.makedirs(LOG_DIR, exist_ok=True)
file_handler = RotatingFileHandler(
LOG_FILE,
maxBytes=5 * 1024 * 1024,
backupCount=3,
encoding="utf-8",
)
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
except OSError:
logger.warning(f"Could not create log file at {LOG_FILE}. Logging to console only.")
return logger