Commit 9034da66411c0f40c2890d22e9c98a75696f5789

Authored by YunaiV
1 parent c6734c4b

完成 API 访问日志

ruoyi-ui/src/api/infra/apiAccessLog.js
1 import request from '@/utils/request' 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 // 获得API 访问日志分页 3 // 获得API 访问日志分页
39 export function getApiAccessLogPage(query) { 4 export function getApiAccessLogPage(query) {
40 return request({ 5 return request({
ruoyi-ui/src/views/infra/apiAccessLog/index.vue
@@ -18,7 +18,7 @@ @@ -18,7 +18,7 @@
18 <el-form-item label="请求地址" prop="requestUrl"> 18 <el-form-item label="请求地址" prop="requestUrl">
19 <el-input v-model="queryParams.requestUrl" placeholder="请输入请求地址" clearable size="small" @keyup.enter.native="handleQuery"/> 19 <el-input v-model="queryParams.requestUrl" placeholder="请输入请求地址" clearable size="small" @keyup.enter.native="handleQuery"/>
20 </el-form-item> 20 </el-form-item>
21 - <el-form-item label="开始请求时间"> 21 + <el-form-item label="请求时间">
22 <el-date-picker v-model="dateRangeBeginTime" size="small" style="width: 240px" value-format="yyyy-MM-dd" 22 <el-date-picker v-model="dateRangeBeginTime" size="small" style="width: 240px" value-format="yyyy-MM-dd"
23 type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" /> 23 type="daterange" range-separator="-" start-placeholder="开始日期" end-placeholder="结束日期" />
24 </el-form-item> 24 </el-form-item>
@@ -45,8 +45,7 @@ @@ -45,8 +45,7 @@
45 45
46 <!-- 列表 --> 46 <!-- 列表 -->
47 <el-table v-loading="loading" :data="list"> 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 <el-table-column label="用户编号" align="center" prop="userId" /> 49 <el-table-column label="用户编号" align="center" prop="userId" />
51 <el-table-column label="用户类型" align="center" prop="userType"> 50 <el-table-column label="用户类型" align="center" prop="userType">
52 <template slot-scope="scope"> 51 <template slot-scope="scope">
@@ -55,31 +54,26 @@ @@ -55,31 +54,26 @@
55 </el-table-column>> 54 </el-table-column>>
56 <el-table-column label="应用名" align="center" prop="applicationName" /> 55 <el-table-column label="应用名" align="center" prop="applicationName" />
57 <el-table-column label="请求方法名" align="center" prop="requestMethod" /> 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 <template slot-scope="scope"> 59 <template slot-scope="scope">
64 - <span>{{ parseTime(scope.row.beginTime, '{y}-{m}-{d}') }}</span> 60 + <span>{{ parseTime(scope.row.beginTime) }}</span>
65 </template> 61 </template>
66 </el-table-column> 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 <template slot-scope="scope"> 64 <template slot-scope="scope">
69 - <span>{{ parseTime(scope.row.endTime, '{y}-{m}-{d}') }}</span> 65 + <span>{{ scope.row.duration }} ms</span>
70 </template> 66 </template>
71 </el-table-column> 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 <template slot-scope="scope"> 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 </template> 71 </template>
79 </el-table-column> 72 </el-table-column>
80 <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> 73 <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
81 <template slot-scope="scope"> 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 </template> 77 </template>
84 </el-table-column> 78 </el-table-column>
85 </el-table> 79 </el-table>
@@ -87,11 +81,39 @@ @@ -87,11 +81,39 @@
87 <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize" 81 <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
88 @pagination="getList"/> 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 </div> 112 </div>
91 </template> 113 </template>
92 114
93 <script> 115 <script>
94 -import { getApiAccessLog, getApiAccessLogPage, exportApiAccessLogExcel } from "@/api/infra/apiAccessLog"; 116 +import { getApiAccessLogPage, exportApiAccessLogExcel } from "@/api/infra/apiAccessLog";
95 117
96 export default { 118 export default {
97 name: "ApiAccessLog", 119 name: "ApiAccessLog",
@@ -181,6 +203,11 @@ export default { @@ -181,6 +203,11 @@ export default {
181 this.resetForm("queryForm"); 203 this.resetForm("queryForm");
182 this.handleQuery(); 204 this.handleQuery();
183 }, 205 },
  206 + /** 详细按钮操作 */
  207 + handleView(row) {
  208 + this.open = true;
  209 + this.form = row;
  210 + },
184 /** 导出按钮操作 */ 211 /** 导出按钮操作 */
185 handleExport() { 212 handleExport() {
186 // 处理查询参数 213 // 处理查询参数
ruoyi-ui/src/views/system/operatelog/index.vue
@@ -115,13 +115,8 @@ @@ -115,13 +115,8 @@
115 </el-table-column> 115 </el-table-column>
116 <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> 116 <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
117 <template slot-scope="scope"> 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 </template> 120 </template>
126 </el-table-column> 121 </el-table-column>
127 </el-table> 122 </el-table>
@@ -135,7 +130,7 @@ @@ -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 <el-form ref="form" :model="form" label-width="100px" size="mini"> 134 <el-form ref="form" :model="form" label-width="100px" size="mini">
140 <el-row> 135 <el-row>
141 <el-col :span="24"> 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,15 +39,6 @@ public class InfApiAccessLogController {
39 @Resource 39 @Resource
40 private InfApiAccessLogService apiAccessLogService; 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 @GetMapping("/page") 42 @GetMapping("/page")
52 @ApiOperation("获得API 访问日志分页") 43 @ApiOperation("获得API 访问日志分页")
53 @PreAuthorize("@ss.hasPermission('infra:api-access-log:query')") 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,7 +40,7 @@ public class InfApiAccessLogBaseVO {
40 @NotNull(message = "请求地址不能为空") 40 @NotNull(message = "请求地址不能为空")
41 private String requestUrl; 41 private String requestUrl;
42 42
43 - @ApiModelProperty(value = "Java 方法的参数") 43 + @ApiModelProperty(value = "请求参数")
44 private String requestParams; 44 private String requestParams;
45 45
46 @ApiModelProperty(value = "用户 IP", required = true, example = "127.0.0.1") 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,7 +39,7 @@ public class InfApiAccessLogExcelVO {
39 @ExcelProperty("请求地址") 39 @ExcelProperty("请求地址")
40 private String requestUrl; 40 private String requestUrl;
41 41
42 - @ExcelProperty("Java 方法的参数") 42 + @ExcelProperty("请求参数")
43 private String requestParams; 43 private String requestParams;
44 44
45 @ExcelProperty("用户 IP") 45 @ExcelProperty("用户 IP")
src/main/java/cn/iocoder/dashboard/modules/infra/service/logger/InfApiAccessLogService.java
@@ -16,14 +16,6 @@ import java.util.List; @@ -16,14 +16,6 @@ import java.util.List;
16 public interface InfApiAccessLogService extends ApiAccessLogFrameworkService { 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 * 获得 API 访问日志分页 19 * 获得 API 访问日志分页
28 * 20 *
29 * @param pageReqVO 分页查询 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,11 +37,6 @@ public class InfApiAccessLogServiceImpl implements InfApiAccessLogService {
37 } 37 }
38 38
39 @Override 39 @Override
40 - public InfApiAccessLogDO getApiAccessLog(Long id) {  
41 - return apiAccessLogMapper.selectById(id);  
42 - }  
43 -  
44 - @Override  
45 public PageResult<InfApiAccessLogDO> getApiAccessLogPage(InfApiAccessLogPageReqVO pageReqVO) { 40 public PageResult<InfApiAccessLogDO> getApiAccessLogPage(InfApiAccessLogPageReqVO pageReqVO) {
46 return apiAccessLogMapper.selectPage(pageReqVO); 41 return apiAccessLogMapper.selectPage(pageReqVO);
47 } 42 }