import sys from datetime import date from pathlib import Path from loguru._logger import Logger as LoguruLogger from loguru import logger as global_logger from config import settings class Local: """ 本地日志记录器 """ _initialized = set() # 防止重复初始化相同 platform_mode @staticmethod def init_logger(platform: str, mode: str, log_level: str = settings.LOG_LEVEL, log_to_console: bool = False, rotation: str = "00:00", retention: str = "10 days") -> LoguruLogger: key = f"{platform}_{mode}" if key in Local._initialized: return global_logger # 已初始化,直接返回 # 创建日志目录 log_path = Path(f"{settings.LOG_DIR}/{platform}") log_path.mkdir(parents=True, exist_ok=True) # 动态日期 current_date = date.today().strftime("%Y-%m-%d") log_filename = f"{platform}-{mode}-{current_date}.log" log_file_path = log_path / log_filename # 添加文件日志 global_logger.add( str(log_file_path), level=log_level.upper(), rotation=rotation, retention=retention, encoding="utf-8", enqueue=True, backtrace=True, diagnose=True ) if log_to_console: global_logger.add( sys.stdout, level=log_level.upper(), format="{time:YYYY-MM-DD HH:mm:ss} | " "{level} | " "{extra[platform]} | " "{extra[mode]} | " "{message}" ) # 绑定上下文便于日志区分来源 logger_with_context = global_logger.bind(platform=platform, mode=mode) Local._initialized.add(key) return logger_with_context