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