SpringBoot自定义starter之接口日志输出

这篇具有很好参考价值的文章主要介绍了SpringBoot自定义starter之接口日志输出。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

本文灵感来源是一道面试题。
要求做一个可以复用的接口日志输出工具,在使用时引入依赖,即可使用。
可能用在多个项目中。

问题处理思路是,自定义一个SpringBoot的Starter,可以加入一些功能配置。核心使用自定义注解、Aspect切面来做。
用切面去切你的自定义注解即可。那么下面内容就做一下具体实现。

自定义starter可以参考文章:https://blog.csdn.net/FBB360JAVA/article/details/128847565

PS:本文使用的环境是 SpringBoot 的 2.7.12版本,Java openjdk11,构建工具使用了 Maven。

文章主体

1 项目全部源码

代码仓库:
https://gitee.com/fengsoshuai/custom-log.git

2 项目结构介绍

SpringBoot自定义starter之接口日志输出

上图中的红色框内容,是自定义的starter模块。
包结构中,annotation 是自定义的注解,aop是切面,config是自动配置类,entity是实体类。

3 starter 的使用

在模块 custom-log-starter-test 模块中进行测试使用。
SpringBoot自定义starter之接口日志输出

3.1 配置文件 application,yml的内容

org:
  feng:
    enableCustomLog: true

server:
  port: 8080

3.2 启动类

package org.feng;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

@EnableAspectJAutoProxy(exposeProxy = true)
@SpringBootApplication
public class CustomLogStarterTestApplication {

    public static void main(String[] args) {
        SpringApplication.run(CustomLogStarterTestApplication.class, args);
    }
}

3.3 控制器类

在接口的方法上,增加注解 CustomLog

package org.feng.controller;

import org.feng.customlog.annotation.CustomLog;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.UUID;

/**
 * 测试控制器
 *
 * @version v1.0
 * @author: fengjinsong
 * @date: 2023年06月05日 17时09分
 */
@RestController
public class CustomLogController {

    private static final Logger LOGGER = LoggerFactory.getLogger(CustomLogController.class);

    @CustomLog
    @PostMapping("/hello/{param}")
    public String hello(@PathVariable("param") String param) {
        LOGGER.info("正在执行接口 CustomLogController#hello({})", param);
        String uuid = UUID.randomUUID().toString();
        return uuid + param;
    }
}

4 测试结果

POST 请求 http://localhost:8080/hello/112233a
输出的日志是:

2023-06-05 17:21:57.381  INFO 16620 --- [nio-8080-exec-1] org.feng.customlog.aop.CustomLogAspect   : hello 的请求参数是:[112233a]
2023-06-05 17:21:57.387  INFO 16620 --- [nio-8080-exec-1] org.feng.controller.CustomLogController  : 正在执行接口 CustomLogController#hello(112233a)
2023-06-05 17:21:57.388  INFO 16620 --- [nio-8080-exec-1] org.feng.customlog.aop.CustomLogAspect   : hello 执行的结果是:7d4b185c-5e5d-4e64-8818-54ef77651561112233a

如果配置进行修改:

org:
  feng:
    enableCustomLog: false

enableCustomLog 改为false,或直接删除该配置,是不会启动日志输出的。(这里就不贴测试结果了)

结语

全部代码可以在gitte中下载查看。
代码仓库:https://gitee.com/fengsoshuai/custom-log.git

有其他思路的同学也可以在评论区留言讨论,我们共同学习,一起进步吧!文章来源地址https://www.toymoban.com/news/detail-474488.html

到了这里,关于SpringBoot自定义starter之接口日志输出的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 自定义一个springboot starter

    在我们的日常开发工作中,经常会有一些独立于业务之外的配置模块,比如阿里云oss存储的时候,我们需要一个工具类进行文件上传。我们经常将其放到一个特定的包下,然后如果另一个工程需要复用这块功能的时候,需要将代码硬拷贝到另一个工程,重新集成一遍,这样会

    2024年02月05日
    浏览(24)
  • SpringBoot之自定义starter

    目录 一、什么是SpringBoot starter机制 二、为什么要自定义starter 三、什么时候需要创建自定义starter 四、自动加载核心注解说明 五、自定义starter的开发流程 案例一:为短信发送功能创建一个starter 案例二:AOP方式统一服务日志 SpringBoot中的starter是一种非常重要的机制(自动化配

    2024年02月01日
    浏览(29)
  • 【实战】SpringBoot自定义 starter及使用

    各位大佬在使用springboot或者springcloud的时候都会根据需求引入各种starter,比如gateway、feign、web、test等等的插件。当然,在实际的业务场景中也会有将第三方组件整合为starter供其他项目接入。那么,我们今天就分享一波SpringBoot自定义 Starter及使用。 SpringBoot starter简介 starter是

    2024年01月22日
    浏览(28)
  • 华为二面:SpringBoot如何自定义Starter?

    Spring Boot的自动配置机制为开发人员提供了一种轻松集成和配置各种功能的便捷方式。然而,随着项目的复杂性增加,更好地组织和分享通用功能变得至关重要。自定义Starter成为了理想的解决方案,旨在简化项目的依赖管理和自动配置,使开发者能够迅速而灵活地集成特定的

    2024年02月21日
    浏览(26)
  • 【Springboot】| 从深入自动配置原理到实现 自定义Springboot starter

    Springboot starter 是SpringBoot的一个重要概念,是“一站式服务 (one-stop)”的依赖 Jar 包包含 Spring 以及相关技术(比如 Redis)的所有依赖提供了自动配置的功能,开箱即用提供了良好的依赖管理,避免了包遗漏、版本冲突等问题。 简单来说, Springboot starter 提供了一种自动配置的机制

    2024年02月11日
    浏览(28)
  • SpringBoot自定义starter开发:IP计数业务功能开发

    🙈作者简介:练习时长两年半的Java up主 🙉个人主页:程序员老茶 🙊 ps:点赞👍是免费的,却可以让写博客的作者开心好久好久😎 📚系列专栏:Java全栈,计算机系列(火速更新中) 💭 格言:种一棵树最好的时间是十年前,其次是现在 🏡动动小手,点个关注不迷路,感

    2024年04月16日
    浏览(24)
  • SpringBoot——原理(自动配置_案例(自定义阿里云文件上传starter))

    本文同步更新于鼠鼠之家 starter就是springboot中的起步依赖,虽然springboot已经提供了很多的起步依赖,但是在实际项目开发中可能会用到和第三方的技术,不是所有第三方在springboot中都有收录。 比如之前文章中有用到过的阿里云OSS,阿里云并没有提供起步依赖,导致每次使用

    2024年02月07日
    浏览(29)
  • SpringBoot——原理(自动配置_案例(自定义阿里云文件上starter))

    本文同步更新于鼠鼠之家 starter就是springboot中的起步依赖,虽然springboot已经提供了很多的起步依赖,但是在实际项目开发中可能会用到和第三方的技术,不是所有第三方在springboot中都有收录。 比如之前文章中有用到过的阿里云OSS,阿里云并没有提供起步依赖,导致每次使用

    2024年02月06日
    浏览(33)
  • SpringBoot3自动配置流程 SPI机制 核心注解 自定义starter

    导入 starter 依赖导入 autoconfigure 寻找类路径下 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件 启动,加载所有 自动配置类 xxxAutoConfiguration 给容器中配置功能 组件 组件参数 绑定到 属性类 中。 xxxProperties 属性类 和 配置文件 前缀项绑定 @Contional 派生的条件

    2024年02月16日
    浏览(34)
  • SpringBoot使用Druid连接池 + 配置监控页面(自定义版 + starter版)

    全方位监控、防SQL注入攻击等 添加druid连接池的依赖,如下所示: 说明如下: @ConfigurationProperties(prefix = “spring.datasource”)注解,将以spring.datasource开头的配置和DataSource类进行绑定,就可以在application.properties对DataSource的属性进行设置了 druidDataSource.setFilters(“stat,wall”):开启

    2024年02月05日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包