优化 yudao-spring-boot-starter-web 的 API 日志封装,和 yudao-cloud 保持一致

This commit is contained in:
YunaiV
2022-06-14 13:42:30 +08:00
parent 284ee5000a
commit 4c6e915def
34 changed files with 441 additions and 166 deletions

View File

@@ -21,6 +21,27 @@
<groupId>cn.iocoder.cloud</groupId>
<artifactId>yudao-common</artifactId>
</dependency>
<!-- Web 相关 -->
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<optional>true</optional>
</dependency>
<!-- 参数校验 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<optional>true</optional>
</dependency>
<!-- RPC 远程调用相关 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,24 @@
package cn.iocoder.yudao.module.infra.api.logger;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.infra.api.logger.dto.ApiAccessLogCreateReqDTO;
import cn.iocoder.yudao.module.infra.enums.ApiConstants;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import javax.validation.Valid;
@FeignClient(name = ApiConstants.NAME) // TODO 芋艿fallbackFactory =
@Api(tags = "RPC 服务 - API 访问日志")
public interface ApiAccessLogApi {
String PREFIX = ApiConstants.PREFIX + "/api-access-log";
@PostMapping(PREFIX + "/create")
@ApiOperation("创建 API 访问日志")
CommonResult<Boolean> createApiAccessLog(@Valid @RequestBody ApiAccessLogCreateReqDTO createDTO);
}

View File

@@ -0,0 +1,24 @@
package cn.iocoder.yudao.module.infra.api.logger;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.infra.api.logger.dto.ApiErrorLogCreateReqDTO;
import cn.iocoder.yudao.module.infra.enums.ApiConstants;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import javax.validation.Valid;
@FeignClient(name = ApiConstants.NAME) // TODO 芋艿fallbackFactory =
@Api(tags = "RPC 服务 - API 异常日志")
public interface ApiErrorLogApi {
String PREFIX = ApiConstants.PREFIX + "/api-error-log";
@PostMapping(PREFIX + "/create")
@ApiOperation("创建 API 异常日志")
CommonResult<Boolean> createApiErrorLog(@Valid @RequestBody ApiErrorLogCreateReqDTO createDTO);
}

View File

@@ -0,0 +1,56 @@
package cn.iocoder.yudao.module.infra.api.logger.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.Date;
@ApiModel("API 访问日志创建 Request DTO")
@Data
public class ApiAccessLogCreateReqDTO {
@ApiModelProperty(value = "链路追踪编号", example = "89aca178-a370-411c-ae02-3f0d672be4ab")
private String traceId;
@ApiModelProperty(value = "用户编号", required = true, example = "1024")
private Long userId;
@ApiModelProperty(value = "用户类型", required = true, example = "1")
private Integer userType;
@ApiModelProperty(value = "应用名", required = true, example = "system-server")
@NotNull(message = "应用名不能为空")
private String applicationName;
@ApiModelProperty(value = "请求方法名", required = true, example = "GET")
@NotNull(message = "http 请求方法不能为空")
private String requestMethod;
@ApiModelProperty(value = "请求地址", required = true, example = "/xxx/yyy")
@NotNull(message = "访问地址不能为空")
private String requestUrl;
@ApiModelProperty(value = "请求参数", required = true)
@NotNull(message = "请求参数不能为空")
private String requestParams;
@ApiModelProperty(value = "用户 IP", required = true, example = "127.0.0.1")
@NotNull(message = "ip 不能为空")
private String userIp;
@ApiModelProperty(value = "浏览器 UserAgent", required = true, example = "Mozilla/5.0")
@NotNull(message = "User-Agent 不能为空")
private String userAgent;
@ApiModelProperty(value = "开始时间", required = true)
@NotNull(message = "开始请求时间不能为空")
private Date beginTime;
@ApiModelProperty(value = "结束时间", required = true)
@NotNull(message = "结束请求时间不能为空")
private Date endTime;
@ApiModelProperty(value = "执行时长,单位:毫秒", required = true)
@NotNull(message = "执行时长不能为空")
private Integer duration;
@ApiModelProperty(value = "结果码", required = true)
@NotNull(message = "错误码不能为空")
private Integer resultCode;
@ApiModelProperty(value = "结果提示")
private String resultMsg;
}

View File

@@ -0,0 +1,69 @@
package cn.iocoder.yudao.module.infra.api.logger.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.Date;
@ApiModel("API 错误日志创建 Request DTO")
@Data
public class ApiErrorLogCreateReqDTO {
@ApiModelProperty(value = "链路追踪编号", example = "89aca178-a370-411c-ae02-3f0d672be4ab")
private String traceId;
@ApiModelProperty(value = "用户编号", required = true, example = "1024")
private Long userId;
@ApiModelProperty(value = "用户类型", required = true, example = "1")
private Integer userType;
@ApiModelProperty(value = "应用名", required = true, example = "system-server")
@NotNull(message = "应用名不能为空")
private String applicationName;
@ApiModelProperty(value = "请求方法名", required = true, example = "GET")
@NotNull(message = "http 请求方法不能为空")
private String requestMethod;
@ApiModelProperty(value = "请求地址", required = true, example = "/xxx/yyy")
@NotNull(message = "访问地址不能为空")
private String requestUrl;
@ApiModelProperty(value = "请求参数", required = true)
@NotNull(message = "请求参数不能为空")
private String requestParams;
@ApiModelProperty(value = "用户 IP", required = true, example = "127.0.0.1")
@NotNull(message = "ip 不能为空")
private String userIp;
@ApiModelProperty(value = "浏览器 UserAgent", required = true, example = "Mozilla/5.0")
@NotNull(message = "User-Agent 不能为空")
private String userAgent;
@ApiModelProperty(value = "异常时间", required = true)
@NotNull(message = "异常时间不能为空")
private Date exceptionTime;
@ApiModelProperty(value = "异常名", required = true)
@NotNull(message = "异常名不能为空")
private String exceptionName;
@ApiModelProperty(value = "异常发生的类全名", required = true)
@NotNull(message = "异常发生的类全名不能为空")
private String exceptionClassName;
@ApiModelProperty(value = "异常发生的类文件", required = true)
@NotNull(message = "异常发生的类文件不能为空")
private String exceptionFileName;
@ApiModelProperty(value = "异常发生的方法名", required = true)
@NotNull(message = "异常发生的方法名不能为空")
private String exceptionMethodName;
@ApiModelProperty(value = "异常发生的方法所在行", required = true)
@NotNull(message = "异常发生的方法所在行不能为空")
private Integer exceptionLineNumber;
@ApiModelProperty(value = "异常的栈轨迹异常的栈轨迹", required = true)
@NotNull(message = "异常的栈轨迹不能为空")
private String exceptionStackTrace;
@ApiModelProperty(value = "异常导致的根消息", required = true)
@NotNull(message = "异常导致的根消息不能为空")
private String exceptionRootCauseMessage;
@ApiModelProperty(value = "异常导致的消息", required = true)
@NotNull(message = "异常导致的消息不能为空")
private String exceptionMessage;
}

View File

@@ -16,7 +16,7 @@ public class ApiConstants {
*/
public static final String NAME = "infra-server";
public static final String PREFIX = RpcConstants.RPC_API_PREFIX + "/system";
public static final String PREFIX = RpcConstants.RPC_API_PREFIX + "/infra";
public static final String VERSION = "1.0.0";