记一次基于springboot+aop实现日志记录实战
1. 为什么要记录日志
好处:
a. 可以对一些重要功能进行记录,方便以后跟踪是谁操作此功能的。
b. 在操作某些功能时可能会发生异常,但每次出现异常我们想定位日志都要去服务器查看我们的日志。有了日志记录,就能记录下该次异常,以便我们统计出现的次数或发生的时间。
c. 可以对用户行为进行分析,了解用户常用操作,方便定点推送消息。
2. 为什么采用aop来做日志
好处:
a. aop是面向切面编程的,符合开闭原则。能做到不修改原代码的基础上对代码进行扩展。
b. aop是spring的核心功能,spring对其已经集成,容易上手。
其他日志解决方案:拦截器
3. 实战开始
好的文章:https://blog.csdn.net/weixin_45137090/article/details/91434347
好的文章:https://www.cnblogs.com/daichangya/archive/2013/05/12/12959708.html
视频教学:https://www.bilibili.com/video/BV1bf4y187KX
需求:记录用户的重要操作
3.1 创建数据库表
3.2 创建日志实体类
public class ProprietorLog implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键id")
private Long id;
@ApiModelProperty(value = "操作人姓名")
private String name;
@ApiModelProperty(value = "操作人所在城市")
private String city;
@ApiModelProperty(value = "操作人所在社区")
private String community;
@ApiModelProperty(value = "操作人电话")
private String phone;
@ApiModelProperty(value = "访问ip")
private String ipAddress;
@ApiModelProperty(value = "功能描述")
private String explain;
@ApiModelProperty(value = "请求地址")
private String url;
@ApiModelProperty(value = "请求方式")
private String requestMethod;
@ApiModelProperty(value = "请求模块")
private String module;
@ApiModelProperty(value = "请求结果 0 成功 1失败")
private Integer status;
@ApiModelProperty(value = "请求参数")
private String parameter;
@ApiModelProperty(value = "操作类型")
private String operationType;
@ApiModelProperty(value = "总耗时 毫秒(单位)")
private Integer runtime;
@ApiModelProperty(value = "异常信息")
private String exceptionInfo;
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ApiModelProperty(value = "修改时间")
private Date updateTime;
}
3.3 创建自定义注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Log {
/**
* 操作类型
*/
String operationType() default LogTypeConst.OTHER;
/**
* 操作模块
*/
String module() default LogModule.OTHER;
/**
* 功能描述
*/
String explain() default "";
/**
* 是否保存请求参数
*/
boolean isSaveRequestData() default true;
}
3.4 创建切面类