| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- """
- 日志配置
- 支持admin和client接口日志分离
- """
- import sys
- from pathlib import Path
- from loguru import logger as loguru_logger
- from app.config import settings
- # 创建日志目录
- log_dir = Path("logs")
- log_dir.mkdir(exist_ok=True)
- # 移除默认处理器
- loguru_logger.remove()
- # 控制台输出 - 优化API出入参显示
- loguru_logger.add(
- sys.stderr,
- format="<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{level: <8}</level> | <cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>",
- level=settings.LOG_LEVEL,
- colorize=True,
- )
- # 默认文件输出(保留,用于其他日志)
- loguru_logger.add(
- log_dir / "app_{time:YYYY-MM-DD}.log",
- rotation="00:00",
- retention="30 days",
- format="{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {name}:{function}:{line} - {message}",
- level="DEBUG",
- encoding="utf-8",
- )
- # Admin专用文件处理器
- admin_handler_id = loguru_logger.add(
- log_dir / "admin_{time:YYYYMMDD}.log",
- rotation="00:00",
- retention="30 days",
- format="{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {name}:{function}:{line} - {message}",
- level="DEBUG",
- encoding="utf-8",
- filter=lambda record: record["extra"].get("admin_interface") is True
- )
- # Client专用文件处理器
- client_handler_id = loguru_logger.add(
- log_dir / "client_{time:YYYYMMDD}.log",
- rotation="00:00",
- retention="30 days",
- format="{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {name}:{function}:{line} - {message}",
- level="DEBUG",
- encoding="utf-8",
- filter=lambda record: record["extra"].get("client_interface") is True
- )
- def setup_logger():
- """设置日志"""
- return loguru_logger
- def get_admin_logger():
- """获取admin接口专用logger"""
- return loguru_logger.bind(admin_interface=True)
- def get_client_logger():
- """获取client接口专用logger"""
- return loguru_logger.bind(client_interface=True)
- def get_logger_by_path(path: str):
- """
- 根据请求路径返回对应的logger
- /admin/* -> admin_logger
- /api/* -> client_logger
- 其他 -> 默认logger
- """
- if path.startswith("/admin/"):
- return loguru_logger.bind(admin_interface=True)
- elif path.startswith("/api/"):
- return loguru_logger.bind(client_interface=True)
- else:
- return loguru_logger
- # 向后兼容:保留logger名称供现有代码使用
- logger = loguru_logger
|