84 lines
2.5 KiB
Python
84 lines
2.5 KiB
Python
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() |