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

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

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
2月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
494 5
|
8月前
|
存储 Java 文件存储
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `&lt;appender&gt;` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `&lt;logger&gt;` 和 `&lt;root&gt;` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
2043 1
|
8月前
|
Java 微服务 Spring
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录——使用Logger在项目中打印日志
本文介绍了如何在项目中使用Logger打印日志。通过SLF4J和Logback,可设置不同日志级别(如DEBUG、INFO、WARN、ERROR)并支持占位符输出动态信息。示例代码展示了日志在控制器中的应用,说明了日志配置对问题排查的重要性。附课程源码下载链接供实践参考。
968 0
|
8月前
|
SQL Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— application.yml 中对日志的配置
在 Spring Boot 项目中,`application.yml` 文件用于配置日志。通过 `logging.config` 指定日志配置文件(如 `logback.xml`),实现日志详细设置。`logging.level` 可定义包的日志输出级别,例如将 `com.itcodai.course03.dao` 包设为 `trace` 级别,便于开发时查看 SQL 操作。日志级别从高到低为 ERROR、WARN、INFO、DEBUG,生产环境建议调整为较高级别以减少日志量。本课程采用 yml 格式,因其层次清晰,但需注意格式要求。
762 0
|
8月前
|
Java API 开发者
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录——slf4j 介绍
在软件开发中,`System.out.println()`常被用于打印信息,但大量使用会增加资源消耗。实际项目推荐使用slf4j结合logback输出日志,效率更高。Slf4j(Simple Logging Facade for Java)是一个日志门面,允许开发者通过统一方式记录日志,无需关心具体日志系统。它支持灵活切换日志实现(如log4j或logback),且具备简洁占位符和日志级别判断等优势。阿里巴巴《Java开发手册》强制要求使用slf4j,以保证日志处理方式的统一性和维护性。使用时只需通过`LoggerFactory`创建日志实例即可。
605 0
|
4月前
|
机器学习/深度学习 XML Java
【spring boot logback】日志logback格式解析
在 Spring Boot 中,Logback 是默认的日志框架,它支持灵活的日志格式配置。通过配置 logback.xml 文件,可以定义日志的输出格式、日志级别、日志文件路径等。
708 5
|
7月前
|
消息中间件 运维 监控
智能运维,由你定义:SAE自定义日志与监控解决方案
通过引入 Sidecar 容器的技术,SAE 为用户提供了更强大的自定义日志与监控解决方案,帮助用户轻松实现日志采集、监控指标收集等功能。未来,SAE 将会支持 istio 多租场景,帮助用户更高效地部署和管理服务网格。
521 52
|
Java 应用服务中间件 Maven
传统maven项目和现在spring boot项目的区别
Spring Boot:传统 Web 项目与采用 Spring Boot 项目区别
681 0
传统maven项目和现在spring boot项目的区别
|
XML Java 数据库连接
创建springboot项目的基本流程——以宠物类别为例
创建springboot项目的基本流程——以宠物类别为例
226 0
创建springboot项目的基本流程——以宠物类别为例
|
存储 机器学习/深度学习 IDE
SpringBoot 项目与被开发快速迁移|学习笔记
快速学习 SpringBoot 项目与被开发快速迁移
SpringBoot 项目与被开发快速迁移|学习笔记