请求与响应参数日志记录框架
前言
实际开发中,如果项目权限管控比较严格,自己又上不去服务器查看日志文件,怎么办?而且日志文件查看也比较繁琐。就随便搞一个数据库记录请求参数与响应数据的日志框架。方便自己排查问题排查问题。
设计
- 使用
AOP
切面技术,将controller层的入参与出参,还有错误信息输出到数据库表logger_info
中。 - 配合日志级别,使得如果不需要,则不开启,或者只输出特定级别的操作。
- 启动时,创建日志表。不需要手动创建。
- 定时备份日志表,减少单表数据量过大。
根据以上内容工程分成设计如下:
注: 由于整个项目使用的是mybatis-plus框架,所以添加了service
和mapper
层,可以使用SQL语句替换
正文
1. 日志实体(日志表)
既然是记录,当然是有记录表了,入参,出参,请求,类,方法,IP,执行时间,都是基本记录。所以就有如下的实体设计。
package com.cah.project.module.logger.domain.entity;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDate;
@Data
@TableName(LoggerInfoEntity.TABLE_NAME)
@ApiModel("日志信息")
public class LoggerInfoEntity {
public static final String TABLE_NAME = "logger_info";
@ApiModelProperty("主键ID")
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@ApiModelProperty("访问的url")
@TableField("url")
private String url;
@ApiModelProperty("类名")
@TableField("class_name")
private String className;
@ApiModelProperty("方法名")
@TableField("method_name")
private String methodName;
@ApiModelProperty("请求的ip地址")
@TableField("req_ip_adr")
private String reqIpAdr;
@ApiModelProperty("响应的ip地址(集群提供)")
@TableField("rsp_ip_adr")
private String rspIpAdr;
@ApiModelProperty("成功标志")
@TableField("success_ind")
private Boolean successInd;
@ApiModelProperty("请求报文头")
@TableField("req_header")
private String reqHeader;
@ApiModelProperty("请求报文体")
@TableField("req_body")
private String reqBody;
@ApiModelProperty("响应报文体")
@TableField("rsp_body")
private String rspBody;
@ApiModelProperty("错误信息")
@TableField("error_msg")
private String errorMsg;
@ApiModelProperty("总耗时")
@TableField("total_time")
private Long totalTime;
@ApiModelProperty("创建时间")
@TableField(value = "create_time", fill = FieldFill.INSERT)
private LocalDate createTime;
}
2. 日志打印级别
这里自定义日志的打印级别,分别为:不打印,打印正常,打印错误,全部打印。根据自身需要,自行修改就好了。
package com.cah.project.module