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

文章目录

  • 前言
  • 文章主体
    • 1 项目全部源码
    • 2 项目结构介绍
    • 3 starter 的使用
      • 3.1 配置文件 application,yml的内容
      • 3.2 启动类
      • 3.3 控制器类
    • 4 测试结果
  • 结语

前言

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

问题处理思路是,自定义一个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: trueserver: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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/620.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV学习笔记 | ROI区域选择提取 | Python

摘要 ROI区域是指图像中我们感兴趣的特定区域,OpenCV提供了一些函数来选择和提取ROI区域,我们可以使用OpenCV的鼠标事件绑定函数,然后通过鼠标操作在图像上绘制一个矩形框,该矩形框即为ROI区域。本文将介绍代码的实现以及四个主要…

Vue中如何进行游戏开发与游戏引擎集成?

Vue中如何进行游戏开发与游戏引擎集成? Vue.js是一款流行的JavaScript框架,它的MVVM模式和组件化开发思想非常适合构建Web应用程序。但是,如果我们想要开发Web游戏,Vue.js并不是最合适的选择。在本文中,我们将介绍如何…

edge自带断网游戏

在没有网络时你会不会很无聊?博主告诉你一个edge浏览器自带的断网小游戏,让你在断网时也能玩游戏! 网址: 打开edge://surf这个断网游戏网站即可游玩: 作弊码既隐藏模式: 输入microsoft(意思就…

Axure教程——图片轮播(纵向滚动)

本文介绍的时用Axure中的动态面板制作图片轮播之纵向滚动 一、预览效果 预览地址:https://c1s4i1.axshare.com 二、功能描述 图片纵向自动滚动播放 三、元件制作 拖入一个动态面板,命名为1,设置大小为375*155,并设置四个状态&…

Python对csv文件一键多值保存为json本地文件再读取加速效率(3)

最近发现做办公自动化表格匹配的时候还是csv格式的文件最快、效率是最高的 今天接到一个需求就是大致内容之这样的 1、给我一张表格直邮一列A列,内容是运单号 2、需要用相同的单号去另外一张表格匹配数据 3、其实就是Excel中的常见的vlookup 但是想要匹配的表格有几…

基于Python所写的Word助手设计

点击以下链接获取源码资源: https://download.csdn.net/download/qq_64505944/87959100?spm1001.2014.3001.5503 《Word助手》程序使用说明 在PyCharm中运行《Word助手》即可进入如图1所示的系统主界面。在该界面中,通过顶部的工具栏可以选择所要进行的…

Pytorch实现多GPU并行训练(DDP)

Pytorch实现并行训练通常有两个接口:DP(DataParallel)和DDP(DistributedDataParallel)。目前DP(DataParallel)已经被Pytorch官方deprecate掉了,原因有二:1,DP…

VisualStudio离线包制作

因为需要,需要制作VisualStudio离线包,之前尝试了很多的方案,均没有下载成功。今天偶然看到一个可行的方案,这里在这里分享下。 从微软官网下载VisualStudio离线包 1 下载安装文件 visualstudio官网 首先进入到官网中&#xff0…

最小二乘法的原理及实现

1.最小二乘法的原理及实现 笔记来源于《白话机器学习的数学》 1.1 最小二乘法的原理 预测一个变量 x x x与一个变量 y y y的关系 例如:广告费 x x x与点击量 y y y 用直线拟合数据 1.2 最小二乘法的实现 广告费x和点击量y,找到一条直线表达式&#x…

MySQL数据表查询

😇作者介绍:一个有梦想、有理想、有目标的,且渴望能够学有所成的追梦人。 🎆学习格言:不读书的人,思想就会停止。——狄德罗 ⛪️个人主页:进入博主主页 🗼专栏系列:进入MySQL知识专…

每天一点Python——day43

#第四十三天字典的视图操作: ①keys()获取字典中所有的键 ②values()获取字典中所有的值 ③items()获取字典中所有的键值对#如图: #例:获取所有的键 a{哥哥:18,妹妹:16,姐姐:17}#字典创立 ba.keys()#获取后我们存在变量b中,右边的…

Vision Pro中VR游戏空间边界为3×3米圆形

6月25日青亭网报道,此前我们已经报道了苹果visionOS有三种应用类型:FullSpaces、Windows、Volume。其中FullSpaces是仅显示一款应用的类型,后两种为共享空间可多窗口、多应用显示。 在FullSpaces模式下,苹果的一份文档显示visionO…