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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 二.七 测试前准备二.八 验证二.九 自定义日志处理方式 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日志并进行多维度分析。
相关文章
|
6天前
|
Java 中间件
SpringBoot入门(6)- 添加Logback日志
SpringBoot入门(6)- 添加Logback日志
40 5
|
14天前
|
JSON Java 数据库
SpringBoot项目使用AOP及自定义注解保存操作日志
SpringBoot项目使用AOP及自定义注解保存操作日志
28 1
|
1月前
|
Java Maven Spring
SpringBoot日志整合
SpringBoot日志整合
19 2
|
1月前
|
数据采集 监控 Java
SpringBoot日志全方位超详细手把手教程,零基础可学习 日志如何配置及SLF4J的使用......
本文是关于SpringBoot日志的详细教程,涵盖日志的定义、用途、SLF4J框架的使用、日志级别、持久化、文件分割及格式配置等内容。
118 0
SpringBoot日志全方位超详细手把手教程,零基础可学习 日志如何配置及SLF4J的使用......
|
1月前
|
SQL XML 监控
SpringBoot框架日志详解
本文详细介绍了日志系统的重要性及其在不同环境下的配置方法。日志用于记录系统运行时的问题,确保服务的可靠性。文章解释了各种日志级别(如 info、warn、error 等)的作用,并介绍了常用的日志框架如 SLF4J 和 Logback。此外,还说明了如何在 SpringBoot 中配置日志输出路径及日志级别,包括控制台输出与文件输出的具体设置方法。通过这些配置,开发者能够更好地管理和调试应用程序。
|
NoSQL 前端开发 Java
SpringBoot核心【starter启动器】
SpringBoot为我们提供了简化企业级开发绝大多数场景的starter pom,只要使用了应用场景所需要的start pom,相关的技术配置将会消除,就可以得到SpringBoot为我们提供的自动配置的Bean。
|
Java 应用服务中间件 Maven
传统maven项目和现在spring boot项目的区别
Spring Boot:传统 Web 项目与采用 Spring Boot 项目区别
484 0
传统maven项目和现在spring boot项目的区别
|
XML Java 数据库连接
创建springboot项目的基本流程——以宠物类别为例
创建springboot项目的基本流程——以宠物类别为例
152 0
创建springboot项目的基本流程——以宠物类别为例
|
存储 机器学习/深度学习 IDE
SpringBoot 项目与被开发快速迁移|学习笔记
快速学习 SpringBoot 项目与被开发快速迁移
SpringBoot 项目与被开发快速迁移|学习笔记
|
Java Spring
自定义SpringBoot项目的启动Banner
``Banner``是``SpringBoot``框架一个特色的部分,其设计的目的无非就是一个框架的标识,其中包含了版本号、框架名称等内容,既然``SpringBoot``为我们提供了这个模块,它肯定也是可以更换的这也是``Spring``开源框架的设计理念。