Commit 9034da66411c0f40c2890d22e9c98a75696f5789

Authored by YunaiV
1 parent c6734c4b

完成 API 访问日志

ruoyi-ui/src/api/infra/apiAccessLog.js
1 1 import request from '@/utils/request'
2 2  
3   -// 创建API 访问日志
4   -export function createApiAccessLog(data) {
5   - return request({
6   - url: '/infra/api-access-log/create',
7   - method: 'post',
8   - data: data
9   - })
10   -}
11   -
12   -// 更新API 访问日志
13   -export function updateApiAccessLog(data) {
14   - return request({
15   - url: '/infra/api-access-log/update',
16   - method: 'put',
17   - data: data
18   - })
19   -}
20   -
21   -
22   -// 删除API 访问日志
23   -export function deleteApiAccessLog(id) {
24   - return request({
25   - url: '/infra/api-access-log/delete?id=' + id,
26   - method: 'delete'
27   - })
28   -}
29   -
30   -// 获得API 访问日志
31   -export function getApiAccessLog(id) {
32   - return request({
33   - url: '/infra/api-access-log/get?id=' + id,
34   - method: 'get'
35   - })
36   -}
37   -
38 3 // 获得API 访问日志分页
39 4 export function getApiAccessLogPage(query) {
40 5 return request({
... ...
ruoyi-ui/src/views/infra/apiAccessLog/index.vue
... ... @@ -18,7 +18,7 @@
18 18 <el-form-item label="请求地址" prop="requestUrl">
19 19 <el-input v-model="queryParams.requestUrl" placeholder="请输入请求地址" clearable size="small" @keyup.enter.native="handleQuery"/>
20 20 </el-form-item>
21   - <el-form-item label="开始请求时间">
  21 + <el-form-item label="请求时间">
22 22 <el-date-picker v-model="dateRangeBeginTime" size="small" style="width: 240px" value-format="yyyy-MM-dd"
23 23 type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" />
24 24 </el-form-item>
... ... @@ -45,8 +45,7 @@
45 45  
46 46 <!-- 列表 -->
47 47 <el-table v-loading="loading" :data="list">
48   - <el-table-column label="日志主键" align="center" prop="id" />
49   - <el-table-column label="链路追踪编号" align="center" prop="traceId" />
  48 + <el-table-column label="日志编号" align="center" prop="id" />
50 49 <el-table-column label="用户编号" align="center" prop="userId" />
51 50 <el-table-column label="用户类型" align="center" prop="userType">
52 51 <template slot-scope="scope">
... ... @@ -55,31 +54,26 @@
55 54 </el-table-column>>
56 55 <el-table-column label="应用名" align="center" prop="applicationName" />
57 56 <el-table-column label="请求方法名" align="center" prop="requestMethod" />
58   - <el-table-column label="请求地址" align="center" prop="requestUrl" />
59   - <el-table-column label="Java 方法的参数" align="center" prop="requestParams" />
60   - <el-table-column label="用户 IP" align="center" prop="userIp" />
61   - <el-table-column label="浏览器 UA" align="center" prop="userAgent" />
62   - <el-table-column label="开始请求时间" align="center" prop="beginTime" width="180">
  57 + <el-table-column label="请求地址" align="center" prop="requestUrl" width="250" />
  58 + <el-table-column label="请求时间" align="center" prop="beginTime" width="180">
63 59 <template slot-scope="scope">
64   - <span>{{ parseTime(scope.row.beginTime, '{y}-{m}-{d}') }}</span>
  60 + <span>{{ parseTime(scope.row.beginTime) }}</span>
65 61 </template>
66 62 </el-table-column>
67   - <el-table-column label="结束请求时间" align="center" prop="endTime" width="180">
  63 + <el-table-column label="执行时长" align="center" prop="startTime">
68 64 <template slot-scope="scope">
69   - <span>{{ parseTime(scope.row.endTime, '{y}-{m}-{d}') }}</span>
  65 + <span>{{ scope.row.duration }} ms</span>
70 66 </template>
71 67 </el-table-column>
72   - <el-table-column label="执行时长" align="center" prop="duration" />
73   - <el-table-column label="结果码" align="center" prop="resultCode" />
74   - <el-table-column label="结果提示" align="center" prop="resultMsg" />
75   - <el-table-column label="创建时间" align="center" prop="createTime" width="180">
  68 + <el-table-column label="操作结果" align="center" prop="status">
76 69 <template slot-scope="scope">
77   - <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
  70 + <span>{{ scope.row.resultCode === 0 ? '成功' : '失败(' + scope.row.resultMsg + ')' }}</span>
78 71 </template>
79 72 </el-table-column>
80 73 <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
81 74 <template slot-scope="scope">
82   -
  75 + <el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row,scope.index)"
  76 + v-hasPermi="['infra:api-access-log:query']">详细</el-button>
83 77 </template>
84 78 </el-table-column>
85 79 </el-table>
... ... @@ -87,11 +81,39 @@
87 81 <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
88 82 @pagination="getList"/>
89 83  
  84 + <!-- 操作日志详细 -->
  85 + <el-dialog title="操作日志详细" :visible.sync="open" width="700px" append-to-body>
  86 + <el-form ref="form" :model="form" label-width="100px" size="mini">
  87 + <el-row>
  88 + <el-col :span="24">
  89 + <el-form-item label="日志主键:">{{ form.id }}</el-form-item>
  90 + <el-form-item label="链路追踪:">{{ form.traceId }}</el-form-item>
  91 + <el-form-item label="链路追踪:">{{ form.applicationName }}</el-form-item>
  92 + <el-form-item label="用户信息:">
  93 + {{ form.userId }} | {{ getDictDataLabel(DICT_TYPE.USER_TYPE, form.userType) }} | {{ form.userIp }} | {{ form.userAgent}}
  94 + </el-form-item>
  95 + <el-form-item label="请求信息:">{{ form.requestMethod }} | {{ form.requestUrl }} </el-form-item>
  96 + <el-form-item label="请求参数:">{{ form.requestParams }}</el-form-item>
  97 + <el-form-item label="开始时间:">
  98 + {{ parseTime(form.beginTime) }} ~ {{ parseTime(form.endTime) }} | {{ form.duration }} ms
  99 + </el-form-item>
  100 + <el-form-item label="操作结果:">
  101 + <div v-if="form.resultCode === 0">正常</div>
  102 + <div v-else-if="form.resultCode > 0">失败 | {{ form.resultCode }} || {{ form.resultMsg}}</div>
  103 + </el-form-item>
  104 + </el-col>
  105 + </el-row>
  106 + </el-form>
  107 + <div slot="footer" class="dialog-footer">
  108 + <el-button @click="open = false">关 闭</el-button>
  109 + </div>
  110 + </el-dialog>
  111 +
90 112 </div>
91 113 </template>
92 114  
93 115 <script>
94   -import { getApiAccessLog, getApiAccessLogPage, exportApiAccessLogExcel } from "@/api/infra/apiAccessLog";
  116 +import { getApiAccessLogPage, exportApiAccessLogExcel } from "@/api/infra/apiAccessLog";
95 117  
96 118 export default {
97 119 name: "ApiAccessLog",
... ... @@ -181,6 +203,11 @@ export default {
181 203 this.resetForm("queryForm");
182 204 this.handleQuery();
183 205 },
  206 + /** 详细按钮操作 */
  207 + handleView(row) {
  208 + this.open = true;
  209 + this.form = row;
  210 + },
184 211 /** 导出按钮操作 */
185 212 handleExport() {
186 213 // 处理查询参数
... ...
ruoyi-ui/src/views/system/operatelog/index.vue
... ... @@ -115,13 +115,8 @@
115 115 </el-table-column>
116 116 <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
117 117 <template slot-scope="scope">
118   - <el-button
119   - size="mini"
120   - type="text"
121   - icon="el-icon-view"
122   - @click="handleView(scope.row,scope.index)"
123   - v-hasPermi="['system:operate-log:query']"
124   - >详细</el-button>
  118 + <el-button size="mini" type="text" icon="el-icon-view" @click="handleView(scope.row,scope.index)"
  119 + v-hasPermi="['system:operate-log:query']">详细</el-button>
125 120 </template>
126 121 </el-table-column>
127 122 </el-table>
... ... @@ -135,7 +130,7 @@
135 130 />
136 131  
137 132 <!-- 操作日志详细 -->
138   - <el-dialog title="操作日志详细" :visible.sync="open" width="700px" append-to-body>
  133 + <el-dialog title="访问日志详细" :visible.sync="open" width="700px" append-to-body>
139 134 <el-form ref="form" :model="form" label-width="100px" size="mini">
140 135 <el-row>
141 136 <el-col :span="24">
... ...
src/main/java/cn/iocoder/dashboard/modules/infra/controller/logger/InfApiAccessLogController.java
... ... @@ -39,15 +39,6 @@ public class InfApiAccessLogController {
39 39 @Resource
40 40 private InfApiAccessLogService apiAccessLogService;
41 41  
42   - @GetMapping("/get")
43   - @ApiOperation("获得API 访问日志")
44   - @ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class)
45   - @PreAuthorize("@ss.hasPermission('infra:api-access-log:query')")
46   - public CommonResult<InfApiAccessLogRespVO> getApiAccessLog(@RequestParam("id") Long id) {
47   - InfApiAccessLogDO apiAccessLog = apiAccessLogService.getApiAccessLog(id);
48   - return success(InfApiAccessLogConvert.INSTANCE.convert(apiAccessLog));
49   - }
50   -
51 42 @GetMapping("/page")
52 43 @ApiOperation("获得API 访问日志分页")
53 44 @PreAuthorize("@ss.hasPermission('infra:api-access-log:query')")
... ...
src/main/java/cn/iocoder/dashboard/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogBaseVO.java
... ... @@ -40,7 +40,7 @@ public class InfApiAccessLogBaseVO {
40 40 @NotNull(message = "请求地址不能为空")
41 41 private String requestUrl;
42 42  
43   - @ApiModelProperty(value = "Java 方法的参数")
  43 + @ApiModelProperty(value = "请求参数")
44 44 private String requestParams;
45 45  
46 46 @ApiModelProperty(value = "用户 IP", required = true, example = "127.0.0.1")
... ...
src/main/java/cn/iocoder/dashboard/modules/infra/controller/logger/vo/apiaccesslog/InfApiAccessLogExcelVO.java
... ... @@ -39,7 +39,7 @@ public class InfApiAccessLogExcelVO {
39 39 @ExcelProperty("请求地址")
40 40 private String requestUrl;
41 41  
42   - @ExcelProperty("Java 方法的参数")
  42 + @ExcelProperty("请求参数")
43 43 private String requestParams;
44 44  
45 45 @ExcelProperty("用户 IP")
... ...
src/main/java/cn/iocoder/dashboard/modules/infra/service/logger/InfApiAccessLogService.java
... ... @@ -16,14 +16,6 @@ import java.util.List;
16 16 public interface InfApiAccessLogService extends ApiAccessLogFrameworkService {
17 17  
18 18 /**
19   - * 获得 API 访问日志
20   - *
21   - * @param id 编号
22   - * @return API 访问日志
23   - */
24   - InfApiAccessLogDO getApiAccessLog(Long id);
25   -
26   - /**
27 19 * 获得 API 访问日志分页
28 20 *
29 21 * @param pageReqVO 分页查询
... ...
src/main/java/cn/iocoder/dashboard/modules/infra/service/logger/impl/InfApiAccessLogServiceImpl.java
... ... @@ -37,11 +37,6 @@ public class InfApiAccessLogServiceImpl implements InfApiAccessLogService {
37 37 }
38 38  
39 39 @Override
40   - public InfApiAccessLogDO getApiAccessLog(Long id) {
41   - return apiAccessLogMapper.selectById(id);
42   - }
43   -
44   - @Override
45 40 public PageResult<InfApiAccessLogDO> getApiAccessLogPage(InfApiAccessLogPageReqVO pageReqVO) {
46 41 return apiAccessLogMapper.selectPage(pageReqVO);
47 42 }
... ...