SpringBoot自定义日志Starter(二十五)下

简介: 二.七 测试前准备二.八 验证二.九 自定义日志处理方式 LogConfig三. EnableXxx 形式处理 日志Starter三.一 定义标识类的类 LogMarkerConfiguration三.二 注解里面引入这个标识类 EnableMyLog三.三 Configuration 里面进行配置三.四 测试运行

二.七 测试前准备

将 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

7.png

输入可能有异常的情况: http://127.0.0.1:8081/Log/div/2/1

8.png

输入异常信息: http://127.0.0.1:8081/Log/div/2/0

9.png

有异常了.

二.八.二 自定义值验证

在 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

10.png

但是实际返回值,是正常的.

11.png输入异常信息: http://127.0.0.1:8081/Log/div/2/0

12.png

处理运行的时间

将 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

13.png

三. EnableXxx 形式处理 日志Starter

现在我们导入了 日志Starter, 但是我不想使用它,那么该如何处理呢? (现在是只要导入了日志依赖,就处理日志)。

SpringBoot 里面,有大量的 @EnableXxx 的注解形式,

14.png

@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

发现,并没有日志输出

15.png

在启动类上 添加 @EnableMyLog 注解

@SpringBootApplication
@EnableMyLog   //添加注解
public class HelloApplication {
}

重新访问,这个时候,控制台便可以打印输出日志信息了

16.png

实现了动态的热插拔的效果.

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1月前
|
XML Java 数据格式
【二十九】springboot整合logback实现日志管理
【二十九】springboot整合logback实现日志管理
55 1
|
3月前
|
Java Spring
【Spring Boot】logback和log4j日志异常处理
【1月更文挑战第25天】【Spring Boot】logback和log4j日志异常处理
|
3月前
|
JSON Java 数据格式
微服务框架(十三)Spring Boot Logstash日志采集
  本文为Spring Boot中Log4j2对接Logstash,进行日志采集。Logstah只支持log4j,使用log4j2时需要通过TCP插件调用 此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。
|
3月前
|
设计模式 Java 机器人
SpringBoot3自动配置流程 SPI机制 核心注解 自定义starter
SpringBoot3自动配置流程 SPI机制 核心注解 自定义starter
|
1月前
|
SQL NoSQL Java
【七】springboot整合AOP实现日志操作
【七】springboot整合AOP实现日志操作
41 0
|
2月前
|
Java Spring 容器
SpringBoot2 | SpringBoot自定义AutoConfiguration | SpringBoot自定义starter(五)
SpringBoot2 | SpringBoot自定义AutoConfiguration | SpringBoot自定义starter(五)
21 0
QGS
|
3月前
|
Java 数据库连接 Apache
Springboot日志框架logback与log4j2
Springboot日志框架logback与log4j2
QGS
40 0
|
3月前
|
存储 监控 安全
【Spring】SpringBoot日志
【Spring】SpringBoot日志
|
3月前
|
Dubbo Java 应用服务中间件
微服务框架(八)Spring Boot AOP 日志切面实现
  此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。   本文为使用Spring Boot AOP 实现日志切面、分离INFO和ERROR级别日志
|
3月前
|
Java Unix 网络安全
Spring Boot整合Log4j做日志处理
Spring Boot整合Log4j做日志处理
41 0