"""Shared logging setup.""" import logging from logging.handlers import RotatingFileHandler from pathlib import Path LOGGER_NAME = "dieya_risk_prediction" LOG_DIR = Path(__file__).resolve().parents[2] / "logs" LOG_FILE = LOG_DIR / "backend.log" _FORMAT = "%(asctime)s %(levelname)s %(name)s %(message)s" def configure_logging(level: str = "INFO") -> logging.Logger: logger = logging.getLogger(LOGGER_NAME) logger.setLevel(level.upper()) logger.propagate = False LOG_DIR.mkdir(parents=True, exist_ok=True) formatter = logging.Formatter(_FORMAT) file_handler = next( ( handler for handler in logger.handlers if getattr(handler, "_dieya_file_handler", False) ), None, ) if file_handler is None: file_handler = RotatingFileHandler( LOG_FILE, maxBytes=10 * 1024 * 1024, backupCount=5, encoding="utf-8", ) file_handler._dieya_file_handler = True file_handler.setFormatter(formatter) logger.addHandler(file_handler) root_logger = logging.getLogger() root_logger.setLevel(level.upper()) if not any(getattr(handler, "_dieya_file_handler", False) for handler in root_logger.handlers): root_file_handler = RotatingFileHandler( LOG_FILE, maxBytes=10 * 1024 * 1024, backupCount=5, encoding="utf-8", ) root_file_handler._dieya_file_handler = True root_file_handler.setFormatter(formatter) root_logger.addHandler(root_file_handler) if not any( isinstance(handler, logging.StreamHandler) and not getattr(handler, "_dieya_file_handler", False) for handler in logger.handlers ): stream_handler = logging.StreamHandler() stream_handler.setFormatter(formatter) logger.addHandler(stream_handler) return logger logger = configure_logging()