mirror of
https://github.com/yyhuni/xingrin.git
synced 2026-02-01 20:23:23 +08:00
70 lines
2.1 KiB
Python
70 lines
2.1 KiB
Python
"""
|
||
系统日志视图模块
|
||
|
||
提供系统日志的 REST API 接口,供前端实时查看系统运行日志。
|
||
"""
|
||
|
||
import logging
|
||
|
||
from django.utils.decorators import method_decorator
|
||
from django.views.decorators.csrf import csrf_exempt
|
||
from rest_framework import status
|
||
from rest_framework.permissions import AllowAny
|
||
from rest_framework.response import Response
|
||
from rest_framework.views import APIView
|
||
|
||
from apps.common.services.system_log_service import SystemLogService
|
||
|
||
|
||
logger = logging.getLogger(__name__)
|
||
|
||
|
||
@method_decorator(csrf_exempt, name="dispatch")
|
||
class SystemLogsView(APIView):
|
||
"""
|
||
系统日志 API 视图
|
||
|
||
GET /api/system/logs/
|
||
获取系统日志内容
|
||
|
||
Query Parameters:
|
||
lines (int, optional): 返回的日志行数,默认 200,最大 10000
|
||
|
||
Response:
|
||
{
|
||
"content": "日志内容字符串..."
|
||
}
|
||
|
||
Note:
|
||
- 当前为开发阶段,暂时允许匿名访问
|
||
- 生产环境应添加管理员权限验证
|
||
"""
|
||
|
||
# TODO: 生产环境应改为 IsAdminUser 权限
|
||
authentication_classes = []
|
||
permission_classes = [AllowAny]
|
||
|
||
def __init__(self, **kwargs):
|
||
super().__init__(**kwargs)
|
||
self.service = SystemLogService()
|
||
|
||
def get(self, request):
|
||
"""
|
||
获取系统日志
|
||
|
||
支持通过 lines 参数控制返回行数,用于前端分页或实时刷新场景。
|
||
"""
|
||
try:
|
||
# 解析 lines 参数
|
||
lines_raw = request.query_params.get("lines")
|
||
lines = int(lines_raw) if lines_raw is not None else None
|
||
|
||
# 调用服务获取日志内容
|
||
content = self.service.get_logs_content(lines=lines)
|
||
return Response({"content": content})
|
||
except ValueError:
|
||
return Response({"error": "lines 参数必须是整数"}, status=status.HTTP_400_BAD_REQUEST)
|
||
except Exception:
|
||
logger.exception("获取系统日志失败")
|
||
return Response({"error": "获取系统日志失败"}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
|