springboot最新版本自定义日志注解和AOP
LogAspectAnnotation
@ControllerLogAspectAnnotation
/**
*
* Define a log facet annotation
* @author sunyang
* @date 2018/12/19 14:23
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE, ElementType.METHOD})
public @interface ControllerLogAspectAnnotation {
//Description
String description() default "";
//Print request paramters
boolean isPrintPostData() default true;
//Print response Results
boolean isPrintResultData() default true;
//Print exceptions
boolean isPrintThrowing() default true;
//Print consumption time
boolean isPrintSpendTime() default false;
//Default value
String value() default "";
}
AbstractControllerLogAspect
com.sunyk.annotation.AbstractControllerLogAspect
/**
* Define abstract class log slices
*
* @author sunyang
* @date 2018/12/19 14:30
*/
public abstract class AbstractControllerLogAspect {
private static final Logger log = LoggerFactory.getLogger(AbstractControllerLogAspect.class);
public AbstractControllerLogAspect() {
}
//Define an abstract method
public abstract void controllerLog();
//Logic processing before operation
@Before("controllerLog() && @annotation(controllerLogAspectAnnotation)")
public void doBefore(JoinPoint joinPoint, ControllerLogAspectAnnotation controllerLogAspectAnnotation) throws Throwable{
if (controllerLogAspectAnnotation.isPrintPostData()){
log.info(controllerLogAspectAnnotation.description() + "开始调用:" + "requestData = {}", joinPoint.getArgs());
}
}
}
ControllerLogAspect
com.sunyk.aop.ControllerLogAspect
/**
*
* Using AOP to define aspect components, and used for annotation such as
* @ControllerLogAspectAnnotation.
* From the AbstractColltrollerLogAspect class.
*
* @author sunyang
* @date 2018/12/19 15:07
*/
@Aspect
@Component
@Configuration
public class ControllerLogAspect extends AbstractControllerLogAspect{
@Override
@Pointcut("execution(* com.sunyk.*.controller.*Controller.*(..))")
public void controllerLog() {
}
}
ServiceMonitor
com.sunyk.aop.ServiceMonitor
/**
* Use AOP alone to define aspect scan components
* @author sunyang
* @date 2018/12/19 18:39
*/
@Aspect
@Component
public class ServiceMonitor {
@AfterReturning("execution(* com.sunyk.*.controller.UseWebFluxController.useLog())")
public void logServiceAccess(JoinPoint joinPoint){
System.out.println("Completed:" + joinPoint);
}
}
Test
com.sunyk.flux.controller.UseWebFluxController
/**
* @author sunyang
* @date 2018/12/19 14:40
*/
@RestController
public class UseWebFluxController {
@GetMapping("/")
@ControllerLogAspectAnnotation(description = "start...", isPrintPostData = true)
public String useLog(){
System.out.println("use log....");
return null;
}
}
Effect Diagram
Other
pom.xml dependencies
<version>2.1.1.RELEASE</version>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
springboot最新版本自定义日志注解和AOP的更多相关文章
- 自定义日志注解 + AOP实现记录操作日志
需求:系统中经常需要记录员工的操作日志和用户的活动日志,简单的做法在每个需要的方法中进行日志保存操作, 但这样对业务代码入侵性太大,下面就结合AOP和自定义日志注解实现更方便的日志记录 首先看 ...
- Springboot中使用自定义参数注解获取 token 中用户数据
使用自定义参数注解获取 token 中User数据 使用背景 在springboot项目开发中需要从token中获取用户信息时通常的方式要经历几个步骤 拦截器中截获token TokenUtil工具类 ...
- 使用springboot最新版本mysql-Connector连接数据库时报错解决
在连接数据库时,使用了最新版本的mysql-Connector,即6.0以上版本 1.报错如下: Loading class `com.mysql.jdbc.Driver'. This is depr ...
- SpringBoot 使用 JSR303 自定义校验注解
JSR303 是 Java EE 6 中的一项子规范,叫做 Bean Validation,官方参考实现是hibernate Validator,有了它,我们可以在实体类的字段上标注不同的注解实现对数 ...
- Spring自定义日志注解
JDK1.5中引入注解,spring框架把java注解发扬光大 一 创建自定义注解 import java.lang.annotation.Retention; import java.lang.a ...
- Springboot高版本中@ConfigurationProperties注解取消location属性
在spring boot 1.5 版本之前 在@ConfigurationProperties注释中有两个属性:locations:指定配置文件的所在位置prefix:指定配置文件中键名称的前缀 sp ...
- 如何优雅地在 Spring Boot 中使用自定义注解,AOP 切面统一打印出入参日志 | 修订版
欢迎关注个人微信公众号: 小哈学Java, 文末分享阿里 P8 资深架构师吐血总结的 <Java 核心知识整理&面试.pdf>资源链接!! 个人网站: https://www.ex ...
- Spring Boot 自定义注解,AOP 切面统一打印出入参请求日志
其实,小哈在之前就出过一篇关于如何使用 AOP 切面统一打印请求日志的文章,那为什么还要再出一篇呢?没东西写了? 哈哈,当然不是!原因是当时的实现方案还是存在缺陷的,原因如下: 不够灵活,由于是以所有 ...
- Spring Boot 中使用自定义注解,AOP 切面打印出入参日志及Dubbo链路追踪透传traceId
一.使用背景 开发排查系统问题用得最多的手段就是查看系统日志,在分布式环境中一般使用 ELK 来统一收集日志,但是在并发大时使用日志定位问题还是比较麻烦,由于大量的其他用户/其他线程的日志也一起输出穿 ...
随机推荐
- Encrypt2
begin#33AB6770A8A98127BD0B5A6DAEC68E5E9385C02D24C850B12987FE36CF1A62738174C6FE5336E3B50048E836238582 ...
- 关于git的reset指令说明-soft、mixed、hard
在开发过程中,git的版本管理越来越普及.在版本管理中,最常用和最重要的是重置提交的版本,恢复后悔做了的事.大家都知道用reset命令.但是有几种形态需要整理共享一下,也方便我自己查阅. 一.首先解析 ...
- jquery mobile Touch事件
Touch事件在用户触摸屏幕(页面)时触发 1.jquery mobile tap tap事件在用户敲击某个元素时触发 $("p").on("tap",fucn ...
- 利用python完成大学刷课(从0到完成的思路)
i春秋作家:tllm 原文来自:利用python完成大学刷课(从0到完成的思路) 最近刚刚开学,学校总是有很多让人无语的课要修,还不能不修.然后我想写一个自动修课的脚本.大佬们不要笑我 是边面向百度学 ...
- Javascript高级编程学习笔记(82)—— 富文本操作(2)
操作富文本 与富文本编辑器的交互的主要方式就是使用 document.execCommand() 方法 该方法可以对文档执行自定义命令,并且可以应用大多数格式 该方法接收三个参数: 要执行命令的名称 ...
- 某神秘公司 RESTful、共用接口、前后端分离、接口约定的实践
阅读本文大概需要 4.6 分钟. 本文来自 https://juejin.im/post/59eafab36fb9a045076eccc3 前言 随着互联网高速发展,公司对项目开发周期不断缩短,我们面 ...
- 《http权威指南》读书笔记17
概述 最近对http很感兴趣,于是开始看<http权威指南>.别人都说这本书有点老了,而且内容太多.我个人觉得这本书写的太好了,非常长知识,让你知道关于http的很多概念,不仅告诉你怎么做 ...
- 使用以下映射将包含A-ZIS的字母的消息编码为数字:'A' - > 1,'B' - > 2 ...'Z' - > 26 给定包含数字的编码消息,确定解码方式的总数(python)(原创)
题目:有一种将字母编码成数字的方式:'a'->1, 'b->2', ... , 'z->26'.现在给一串数字,给出有多少种可能的译码结果. 实现逻辑: 1,使用队列的数据类型,每一 ...
- C#--对象转Json序列化
前言 最近在研究Android项目,其中涉及到Android中解析Json数据的问题,需要模拟网络中传递Json数据的模式,因为以前是.net的工程师,所以想着从.net的平台开发服务,传递Json格 ...
- 项目中使用sass,如何实现自动编译
本次React项目中用到了Sass,在一个主文件main.scss中引入了其余的scss文件,然后把main.scss文件编译为main.css文件,最后在项目的主文件入口index.html中引入m ...