二.七 测试前准备
将 yjlLog 项目 通过 maven clean install 安装到本地仓库.
二.七.一 StarterApply 项目 pom.xml 添加依赖
<!--添加自定义日志的依赖信息--> <dependency> <groupId>top.yueshushu</groupId> <artifactId>yjlLog</artifactId> <version>1.0-SNAPSHOT</version> </dependency>
二.七.二 准备 controller验证 HelloController
package top.yueshushu.learn.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import top.yueshushu.learn.response.OutputResult; import top.yueshushu.log.MyLog; /** * @ClassName:HelloController * @Description 普通的Controller 方法 * @Author zk_yjl * @Date 2021/4/9 20:55 * @Version 1.0 **/ //1. 添加了一个RestController的注解 @RestController public class HelloController { // 无参 @GetMapping("/") public OutputResult toHello(){ return OutputResult.success("无参数响应"); } //相加 @GetMapping("/add/{a}/{b}") public OutputResult add(@PathVariable("a") int a, @PathVariable("b") int b){ System.out.println("进行添加"); return OutputResult.success(a+b); } //可能会出现异常的方法 @GetMapping("/div/{a}/{b}") @MyLog(module = "测试Controller",optType = "测试",description = "可能有异常的情况") public OutputResult div(@PathVariable("a") int a, @PathVariable("b") int b){ return OutputResult.success(a/b); } }
二.八 验证
二.八.一 默认值验证
输入网址: http://127.0.0.1:8081/Log/add/1/0
输入可能有异常的情况: http://127.0.0.1:8081/Log/div/2/1
输入异常信息: http://127.0.0.1:8081/Log/div/2/0
有异常了.
二.八.二 自定义值验证
在 application.yml 配置文件中,进行相应的配置
#配置日志 mylog: run-time: 0 #运行时间为0,暂时不设置大值 result-length: 10 # 结果就返回10 exc-full-show: false # 不展示全异常
输入可能有异常的情况: http://127.0.0.1:8081/Log/div/2/1
但是实际返回值,是正常的.
输入异常信息: http://127.0.0.1:8081/Log/div/2/0
处理运行的时间
将 mylog.run-time 时间设置成 100 时,无任何日志打印输出
设置成 1时,有相应的日志打印输出
说明日志 starter 是成功的.
二.九 自定义日志处理方式 LogConfig
现在的日志处理方式,是默认的打印方式. 使用者可以进行自定义,如放置到数据库里面.
在 StarterApply 项目时,进行配置
package top.yueshushu.learn.config; import org.springframework.context.annotation.Configuration; import top.yueshushu.log.LogService; import top.yueshushu.log.LogVo; /** * @ClassName:LogConfig * @Description 自定义配置日志处理方式 * @Author zk_yjl * @Date 2021/10/25 20:12 * @Version 1.0 * @Since 1.0 **/ @Configuration //添加注解 public class LogConfig implements LogService { //注入数据 Mapper, 进行处理. @Override public void logHandler(LogVo logVo) { //一个简单的输出,让自定义生效 System.out.println(">>>将其写入到数据库里面,内容是:"+logVo); } }
进行自定义接口验证 ( mylog.run-time 设置值为1)
输入网址: http://127.0.0.1:8081/Log/add/2/2
三. EnableXxx 形式处理 日志Starter
现在我们导入了 日志Starter, 但是我不想使用它,那么该如何处理呢? (现在是只要导入了日志依赖,就处理日志)。
SpringBoot 里面,有大量的 @EnableXxx 的注解形式,
@EnableCaching 添加了,就可以进行缓存 cache,不添加,不可以进行缓存。
我们可以使用到上一章节里面的第三步内容 , 实现动态的热插拔
动态的进行配置,热插拔效果。达到 我们拥有这个自定义starter,就拥有这些东西,没有自定义starter,就没有这些东西的效果。
这就用到了 @ConditionalOnClass 注解均在 自定义的 LogStarter 里面进行处理.
三.一 定义标识类的类 LogMarkerConfiguration
LogMarkerConfiguration.java
package top.yueshushu.log; /** * @ClassName:LogMarkerConfiguration * @Description TODO * @Author zk_yjl * @Date 2021/10/25 17:42 * @Version 1.0 * @Since 1.0 **/ public class LogMarkerConfiguration { }
三.二 注解里面引入这个标识类 EnableMyLog
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @Documented @Import(LogMarkerConfiguration.class) //添加了这一个 public @interface EnableMyLog { }
三.三 Configuration 里面进行配置
@Configuration @EnableConfigurationProperties(MyLogProperties.class) @ConditionalOnBean(LogMarkerConfiguration.class) // 添加这一个 public class LogConfiguration { // 后面均一样 }
三.四 测试运行
将 自定义的 starter 重新 maven clean install .
重新运行项目,访问: http://127.0.0.1:8081/Log/add/2/2
发现,并没有日志输出
在启动类上 添加 @EnableMyLog 注解
@SpringBootApplication @EnableMyLog //添加注解 public class HelloApplication { }
重新访问,这个时候,控制台便可以打印输出日志信息了
实现了动态的热插拔的效果.