import os import json from datetime import datetime from loguru import logger class APILogger: def __init__(self, log_dir="logs"): self.log_dir = log_dir self._setup_logging() def _setup_logging(self): """设置日志配置""" # 创建日志目录(如果不存在) if not os.path.exists(self.log_dir): os.makedirs(self.log_dir) # 配置loguru logger.add( f"{self.log_dir}/app_{{time}}.log", rotation="100 MB", retention="30 days", format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {message}" ) logger.add( f"{self.log_dir}/error_{{time}}.log", level="ERROR", rotation="100 MB", retention="90 days", format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {message}" ) def log_request(self, method, url, headers, body=None): """记录API请求""" log_data = { "type": "request", "method": method, "url": str(url), "headers": dict(headers), "timestamp": datetime.now().isoformat() } if body: log_data["body"] = body logger.info(f"API Request: {json.dumps(log_data, ensure_ascii=False)}") def log_response(self, status_code, response_data, process_time=None): """记录API响应""" log_data = { "type": "response", "status_code": status_code, "response_data": response_data, "process_time": process_time, "timestamp": datetime.now().isoformat() } if status_code >= 400: logger.error(f"API Response: {json.dumps(log_data, ensure_ascii=False)}") else: logger.info(f"API Response: {json.dumps(log_data, ensure_ascii=False)}") def log_error(self, error_msg, error_details=None): """记录错误""" log_data = { "type": "error", "error_msg": error_msg, "error_details": error_details, "timestamp": datetime.now().isoformat() } logger.error(f"API Error: {json.dumps(log_data, ensure_ascii=False)}") def log_info(self, message): """记录信息""" logger.info(message) def log_warning(self, message): """记录警告""" logger.warning(message) # 创建全局日志实例 api_logger = APILogger()