"""
日志配置
支持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="{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {name}:{function}:{line} - {message}",
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