123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- 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="<green>{time:YYYY-MM-DD HH:mm:ss}</green> | "
- "<level>{level}</level> | "
- "<cyan>{extra[platform]}</cyan> | "
- "<cyan>{extra[mode]}</cyan> | "
- "{message}"
- )
- # 绑定上下文便于日志区分来源
- logger_with_context = global_logger.bind(platform=platform, mode=mode)
- Local._initialized.add(key)
- return logger_with_context
|