文章目录
- 前言
- 文章主体
- 1 项目全部源码
- 2 项目结构介绍
- 3 starter 的使用
- 3.1 配置文件 application,yml的内容
- 3.2 启动类
- 3.3 控制器类
- 4 测试结果
- 结语
前言
本文灵感来源是一道面试题。
要求做一个可以复用的接口日志输出工具,在使用时引入依赖,即可使用。
可能用在多个项目中。
问题处理思路是,自定义一个SpringBoot的Starter,可以加入一些功能配置。核心使用自定义注解、Aspect切面来做。
用切面去切你的自定义注解即可。那么下面内容就做一下具体实现。
自定义starter可以参考文章:https://blog.csdn.net/FBB360JAVA/article/details/128847565
PS:本文使用的环境是 SpringBoot 的 2.7.12版本,Java openjdk11,构建工具使用了 Maven。
文章主体
1 项目全部源码
代码仓库:
https://gitee.com/fengsoshuai/custom-log.git
2 项目结构介绍
上图中的红色框内容,是自定义的starter模块。
包结构中,annotation 是自定义的注解,aop是切面,config是自动配置类,entity是实体类。
3 starter 的使用
在模块 custom-log-starter-test 模块中进行测试使用。
3.1 配置文件 application,yml的内容
org:feng:enableCustomLog: trueserver:port: 8080
3.2 启动类
package org.feng;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.EnableAspectJAutoProxy;@EnableAspectJAutoProxy(exposeProxy = true)
@SpringBootApplication
public class CustomLogStarterTestApplication {public static void main(String[] args) {SpringApplication.run(CustomLogStarterTestApplication.class, args);}
}
3.3 控制器类
在接口的方法上,增加注解 CustomLog
。
package org.feng.controller;import org.feng.customlog.annotation.CustomLog;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.UUID;/*** 测试控制器** @version v1.0* @author: fengjinsong* @date: 2023年06月05日 17时09分*/
@RestController
public class CustomLogController {private static final Logger LOGGER = LoggerFactory.getLogger(CustomLogController.class);@CustomLog@PostMapping("/hello/{param}")public String hello(@PathVariable("param") String param) {LOGGER.info("正在执行接口 CustomLogController#hello({})", param);String uuid = UUID.randomUUID().toString();return uuid + param;}
}
4 测试结果
POST 请求 http://localhost:8080/hello/112233a
输出的日志是:
2023-06-05 17:21:57.381 INFO 16620 --- [nio-8080-exec-1] org.feng.customlog.aop.CustomLogAspect : hello 的请求参数是:[112233a]
2023-06-05 17:21:57.387 INFO 16620 --- [nio-8080-exec-1] org.feng.controller.CustomLogController : 正在执行接口 CustomLogController#hello(112233a)
2023-06-05 17:21:57.388 INFO 16620 --- [nio-8080-exec-1] org.feng.customlog.aop.CustomLogAspect : hello 执行的结果是:7d4b185c-5e5d-4e64-8818-54ef77651561112233a
如果配置进行修改:
org:feng:enableCustomLog: false
enableCustomLog 改为false,或直接删除该配置,是不会启动日志输出的。(这里就不贴测试结果了)
结语
全部代码可以在gitte中下载查看。
代码仓库:https://gitee.com/fengsoshuai/custom-log.git
有其他思路的同学也可以在评论区留言讨论,我们共同学习,一起进步吧!