import os import logging from typing import Any PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) def setup_logger() -> logging.Logger: """Configures structured logging to both standard output and log file.""" log_dir = os.path.join(PROJECT_ROOT, "logs") os.makedirs(log_dir, exist_ok=True) log_file = os.path.join(log_dir, "customer_analytics.log") logger = logging.getLogger("customer_analytics") logger.setLevel(logging.INFO) # Avoid duplicate handlers if imported multiple times if not logger.handlers: formatter = logging.Formatter( '[%(asctime)s] %(levelname)s [%(filename)s:%(lineno)d] %(message)s', datefmt='%Y-%m-%d %H:%M:%S' ) # File Handler file_handler = logging.FileHandler(log_file, encoding='utf-8') file_handler.setFormatter(formatter) logger.addHandler(file_handler) # Console Handler console_handler = logging.StreamHandler() console_handler.setFormatter(formatter) logger.addHandler(console_handler) return logger # Globally available logger instance logger = setup_logger()