您现在的位置是:首页 >技术交流 >SpringBoot自定义starter之接口日志输出网站首页技术交流

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

你家宝宝 2024-08-18 12:01:02
简介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 项目结构介绍

在这里插入图片描述

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

3 starter 的使用

在模块 custom-log-starter-test 模块中进行测试使用。
在这里插入图片描述

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

有其他思路的同学也可以在评论区留言讨论,我们共同学习,一起进步吧!

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。