Spaces:
Sleeping
Sleeping
| 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() | |