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日志并进行多维度分析。
相关文章
|
11天前
|
XML Java 数据格式
【二十九】springboot整合logback实现日志管理
【二十九】springboot整合logback实现日志管理
158 1
|
5天前
|
定位技术 调度
自定义同步日志系统
自定义同步日志系统
9 2
|
11天前
|
JavaScript Java API
【JavaEE】Spring Boot - 日志文件
【JavaEE】Spring Boot - 日志文件
6 0
|
11天前
|
XML Java Maven
Springboot整合与使用log4j2日志框架【详解版】
该文介绍了如何在Spring Boot中切换默认的LogBack日志系统至Log4j2。首先,需要在Maven依赖中排除`spring-boot-starter-logging`并引入`spring-boot-starter-log4j2`。其次,创建`log4j2-spring.xml`配置文件放在`src/main/resources`下,配置包括控制台和文件的日志输出、日志格式和文件切分策略。此外,可通过在不同环境的`application.yml`中指定不同的log4j2配置文件。最后,文章提到通过示例代码解释了日志格式中的各种占位符含义。
|
11天前
|
Java 数据安全/隐私保护 开发者
【SpringBoot】讲清楚日志文件&&lombok
【SpringBoot】讲清楚日志文件&&lombok
30 5
|
11天前
|
运维 Java Devops
云效产品使用报错问题之自定义环境构建没有日志,也没有报错,如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
云效产品使用报错问题之自定义环境构建没有日志,也没有报错,如何解决
|
11天前
|
XML Java 数据库连接
Springboot中使用日志框架
Springboot中使用日志框架
|
11天前
|
Java 程序员
SpringBoot集成log4j2出现Logback configuration error detected: current ElementPath is
SpringBoot集成log4j2出现Logback configuration error detected: current ElementPath is
39 0
|
11天前
|
XML Java 开发者
【SpringBoot实战专题】「开发实战系列」全方位攻克你的技术盲区之SpringBoot整合众多日志管理系统服务starter-logging
【SpringBoot实战专题】「开发实战系列」全方位攻克你的技术盲区之SpringBoot整合众多日志管理系统服务starter-logging
66 1
|
11天前
|
SQL NoSQL Java
【七】springboot整合AOP实现日志操作
【七】springboot整合AOP实现日志操作
54 0