| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- """
- 日志配置
- 支持admin和client接口日志分离
- """
- import sys
- from pathlib import Path
- from loguru import logger
- from app.config import settings
- # 创建日志目录
- log_dir = Path("logs")
- log_dir.mkdir(exist_ok=True)
- # 移除默认处理器
- logger.remove()
- # 控制台输出 - 优化API出入参显示
- 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,
- # 对于DEBUG级别,使用更清晰的格式显示API出入参
- colorize=True,
- )
- # Admin接口日志文件输出
- admin_logger = logger.bind(name="admin")
- admin_logger.remove() # 移除继承的处理器
- admin_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,
- )
- admin_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",
- )
- # Client接口日志文件输出
- client_logger = logger.bind(name="client")
- client_logger.remove() # 移除继承的处理器
- client_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,
- )
- client_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",
- )
- def setup_logger():
- """设置日志"""
- return logger
- def get_admin_logger():
- """获取admin接口专用logger"""
- return admin_logger
- def get_client_logger():
- """获取client接口专用logger"""
- return client_logger
- def get_logger_by_path(path: str):
- """
- 根据请求路径返回对应的logger
- /admin/* -> admin_logger
- /api/* -> client_logger
- 其他 -> 默认logger
- """
- if path.startswith("/admin/"):
- return admin_logger
- elif path.startswith("/api/"):
- return client_logger
- else:
- return logger
|