记一次基于springboot+aop实现日志记录实战
1. 为什么要记录日志
好处:
a. 可以对一些重要功能进行记录,方便以后跟踪是谁操作此功能的。
b. 在操作某些功能时可能会发生异常,但每次出现异常我们想定位日志都要去服务器查看我们的日志。有了日志记录,就能记录下该次异常,以便我们统计出现的次数或发生的时间。
c. 可以对用户行为进行分析,了解用户常用操作,方便定点推送消息。
2. 为什么采用aop来做日志
好处:
a. aop是面向切面编程的,符合开闭原则。能做到不修改原代码的基础上对代码进行扩展。
b. aop是spring的核心功能,spring对其已经集成,容易上手。
其他日志解决方案:拦截器
3. 实战开始
需求:记录用户的重要操作
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 创建切面类
3.5 将数据写入数据库
记一次基于springboot+aop实现日志记录实战的更多相关文章
- 基于SpringBoot AOP面向切面编程实现Redis分布式锁
基于SpringBoot AOP面向切面编程实现Redis分布式锁 基于SpringBoot AOP面向切面编程实现Redis分布式锁 基于SpringBoot AOP面向切面编程实现Redis分布式 ...
- Spring AOP 完成日志记录
Spring AOP 完成日志记录 http://hotstrong.iteye.com/blog/1330046
- Spring AOP进行日志记录
在java开发中日志的管理有很多种.我一般会使用过滤器,或者是Spring的拦截器进行日志的处理.如果是用过滤器比较简单,只要对所有的.do提交进行拦截,然后获取action的提交路径就可以获取对每个 ...
- Spring AOP进行日志记录,管理
在java开发中日志的管理有很多种.我一般会使用过滤器,或者是Spring的拦截器进行日志的处理.如果是用过滤器比较简单,只要对所有的.do提交进行拦截,然后获取action的提交路径就可以获取对每个 ...
- 基于.NetCore3.1系列 —— 日志记录之初识Serilog
一.前言 对内置日志系统的整体实现进行了介绍之后,可以通过使用内置记录器来实现日志的输出路径.而在实际项目开发中,使用第三方日志框架(如: Log4Net.NLog.Loggr.Serilog.Sen ...
- java使用动态代理来实现AOP(日志记录)
以下内容为原创,转载时请注明链接地址:http://www.cnblogs.com/tiantianbyconan/p/3336627.html AOP(面向方面)的思想,就是把项目共同的那部分功能分 ...
- spring boot集成aop实现日志记录
1.pom依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...
- Spring AOP的日志记录
现在的项目是Spring+MyBatis,前段时间项目经理让我干了一个活,就是给所有的controller里的所有方法加上日志记录的代码,其实没有多少,也就300来个方法,也没有抱怨什么,一边打着瞌睡 ...
- SpringBoot使用logback日志记录
在resources里的配置文件: logback-spring.xml <?xml version="1.0" encoding="UTF-8" ?&g ...
随机推荐
- 【Linux】系统打开文件最大数量限制(进程打开的最大文件句柄数设置)
利用ulimit命令可以对资源的可用性进行控制. -H选项和-S选项分别表示对给定资源的硬限制(hard limit)和软限制(soft limit)进行设置. 硬限制(hard limit)一旦被设 ...
- 【TNS】listener.ora模板;tnsnames.ora模板
好多人使用监听的时候误操作,将监听弄的不好使了,这次这个模板,不光是针对大家出现的这种问题,也是给我自己留一个记录,方便他人,方便自己. listener.ora模板样例 -------------- ...
- 【ORA】Specified value of MEMORY_TARGET is too small, needs to be at least 3072M解决办法
今天安装EM12C的时候遇到了一个报错: 修改好数据库中的参数大小后,重新启动报错 Specified value of MEMORY_TARGET is too small, needs to be ...
- 一句话木马拿下webshell
1.我们先建立一个简单的一句话木马文件,我们这里就命名为shell2吧. 2.因为提交的文件可能是有过滤的,我们这个靶场的这个题目就是禁止上传危险的文件类型,如jsp jar war等,所以就需要绕过 ...
- 利用容器逃逸实现远程登录k8s集群节点
某天, 某鱼说要吃瞄, 于是...... 李国宝:边缘计算k8s集群SuperEdge初体验 zhuanlan.zhihu.com 图标 照着上一篇文章来说,我这边边缘计算集群有一堆节点. 每个节 ...
- 1.8V转5V电平转换芯片,1.8V转5V的电源芯片
1.8V是一个比较低的电压,在电压供电电压中,1.8V电压的过于小了,在一些电子模块或者MCU中,无法达到供电电压,和稳压作用,PW5100就是可以在1.8V转5V的电平转换电路和芯片,最大可提供50 ...
- 【Android初级】利用startActivityForResult返回数据到前一个Activity(附源码+解析)
在Android里面,从一个Activity跳转到另一个Activity.再返回,前一个Activity默认是能够保存数据和状态的.但这次我想通过利用startActivityForResult达到相 ...
- https://design-patterns.readthedocs.io/zh_CN/latest/index.html
图说设计模式 - Graphic Design Patterns https://design-patterns.readthedocs.io/zh_CN/latest/index.html
- It is thread-safe and idempotent, but not reentrant.
https://github.com/django/django/blob/master/django/apps/registry.py
- 一个sql盲注小工具 (Golang版)
并发,二分法判断. 源码写的有点垃圾,有点乱,结果也存在一些缺失. 记录: sql:select distinct 中的distinct选项,这是只会获取你表中不重复数据,是表中,而不是你一次sql执 ...