Files
tfm_ainventory/backend/logger.py
2026-04-15 17:54:21 +03:00

53 lines
1.7 KiB
Python

import logging
import os
from logging.handlers import RotatingFileHandler
# Define paths
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
# Fallback to local 'logs' dir if not overridden in Docker
LOGS_DIR = os.environ.get("LOGS_DIR", os.path.join(BASE_DIR, "logs"))
# Ensure directory exists
os.makedirs(LOGS_DIR, exist_ok=True)
LOG_FILE_PATH = os.path.join(LOGS_DIR, "backend.log")
def setup_logger():
logger = logging.getLogger("ainventory")
# Set to DEBUG for development; change to INFO for production
log_level = os.environ.get("LOG_LEVEL", "DEBUG")
logger.setLevel(getattr(logging, log_level.upper(), logging.INFO))
# Avoid duplicate handlers if setup multiple times
if logger.handlers:
return logger
formatter = logging.Formatter(
"[%(asctime)s] [%(levelname)s] [%(name)s] %(message)s",
datefmt="%Y-%m-%d %H:%M:%S"
)
# File Handler (10MB max, keep 5 backups)
try:
file_handler = RotatingFileHandler(
LOG_FILE_PATH, maxBytes=10*1024*1024, backupCount=5
)
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
# Special redirect for uvicorn logs to also go to file
logging.getLogger("uvicorn").addHandler(file_handler)
logging.getLogger("uvicorn.access").addHandler(file_handler)
except (PermissionError, IOError) as e:
logger.warning(f"⚠️ [LOGGING] Cannot write to log file at {LOG_FILE_PATH}: {e}")
logger.warning("⚠️ [LOGGING] Continuing with console-only output.")
# Console Handler (always registered)
console_handler = logging.StreamHandler()
console_handler.setFormatter(formatter)
logger.addHandler(console_handler)
return logger
log = setup_logger()