Springboot集成magic-api的详细过程

 更新时间:2023年06月13日 08:59:46   作者:有一只柴犬  
这篇文章主要介绍了Springboot集成magic-api的相关知识,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

1、前言

今天项目中遇到一个问题,springboot后端项目经常使用log4j输出日志,同时会配置相应日志级别。但是由于开发过程中不经意间都会log.info("xxxx")来打印日志,而线上级别也会控制在info级别。正常不会有什么问题,但是今天有个超长报文传输,恰好日志在控制台输出了这段报文用作跟踪。而log并没有开启缓存以及并行写入,导致IO阻塞,程序无法正常响应。

通常情况下,这种问题的解决措施为:

  • 直接重启程序
  • 使用arths动态调整日志级别

arths是个好工具,很适合用于线上排障,应对该场景也可以直接动态调整log级别,而不需要重启服务器。那么今天再介绍另一个可以动态调整日志级别的工具,magic-api。magic-api

2、springboot集成magic-api

2.1、添加maven依赖

<dependency>    
    <groupId>org.ssssssss</groupId>    
    <artifactId>magic-api-spring-boot-starter</artifactId>    
    <version>2.1.0</version>
</dependency>

其他springboot的相关依赖就不赘述了。

2.2、application.yml配置

magic-api:
  web: /magic/web    # magic-api控制台访问地址
  resource:          # magic-api数据存储信息配置
    location: workspace/magic/data      # location表示使用本地文件存储,存储路径为工作目录workspace/magic/data下
    datasource:        # datasource表示数据源存储,这里指定使用的数据源, datasource和location选择一个

2.3、编写测试接口

@Slf4j
@RestController
@RequestMapping("test")
public class TestController {
    @GetMapping("index")
    public String index(){
        //  trace 级别日志        
        LOGGER.trace("-------trace------");
        //  debug 级别日志        
        LOGGER.debug("-------debug------");
        //  info 级别日志        
        LOGGER.info("-------info------");
        //  warn 级别日志        
        LOGGER.warn("-------warn------");
        //  error 级别日志        
        LOGGER.error("-------error------");
        return "ok";
    }
}

2.4、启动程序,访问接口

当看到控制台输出如下信息,就是已经启动成功了。

访问接口:http://localhost:8083/test/index。可以看到日志打印:

由于默认日志级别是info,所以看到info以上级别的输出。

2.5、magic-api脚本

打开magic-api控制台:http://192.168.0.109:8083/magic/web/index.html

左侧菜单栏选择接口,接着空白处右键创建分组:

创建完分组后,创建接口:

创建后,在return "Hello magic-api"编辑框内使用如下脚本:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.LoggerContext;
var levelName = "debug";
var packageName = "com.xxx";
LoggerFactory.getILoggerFactory().getLogger(packageName).setLevel(Level.toLevel(levelName));
return "OK";

由于springboot中使用了lombok,使用了默认的logback,所以这里的impor实现类需要找对。不然没有效果。

输入后,点击右上角的运行按钮。运行完可以再次访问测试接口地址。

可以看到日志级别调整为debug,而程序不用重启。

3、magic-api其他语法

magic-api其实是通过JVM的script语言注入进去,提供了其他丰富的功能。这里不赘述,也需要慢慢使用体会。其他的特性语法可以参考文档:

简介 | magic-api

这里只是抛砖引玉而已。

4、注意事项

使用magic-api的时候需要注意,正因为如此方便的功能和特性,如果贸然线上使用该插件,很容易导致被人而已攻击注入。所以尽可能避免外网访问,我们的处理措施是ng代理上直接不对外暴露,仅限于内部研发排障使用。

相比这种需要集成在代码中的使用方式,arths可能具有天然的优势,但是magic-api也有其特长,可以双管齐下,取长补短吧。

相关文章

  • IDEA指定Maven的settings不生效问题的解决方法

    IDEA指定Maven的settings不生效问题的解决方法

    在IntelliJ IDEA中手动指定Maven settings文件未生效,主要因用户目录和全局配置优先级高于IDEA指定的文件,下面就来介绍一下该问题的解决,感兴趣的可以了解一下
    2025-08-08
  • Java中BigDecimal与0比较的一个坑实战记录

    Java中BigDecimal与0比较的一个坑实战记录

    BigDecimal属于大数据,精度极高,不属于基本数据类型,属于java对象,下面这篇文章主要给大家介绍了关于Java中BigDecimal与0比较的一个坑的相关资料,需要的朋友可以参考下
    2022-12-12
  • spring boot+自定义 AOP 实现全局校验的实例代码

    spring boot+自定义 AOP 实现全局校验的实例代码

    最近公司重构项目,重构为最热的微服务框架 spring boot, 重构的时候遇到几个可以统一处理的问题。这篇文章主要介绍了spring boot+自定义 AOP 实现全局校验 ,需要的朋友可以参考下
    2019-04-04
  • Java实现图片裁剪功能的示例详解

    Java实现图片裁剪功能的示例详解

    这篇文章主要介绍了如何利用Java实现图片裁剪功能,可以将图片按照自定义尺寸进行裁剪,文中的示例代码讲解详细,感兴趣的可以了解一下
    2022-01-01
  • java实现RTF文件查看器(附带源码)

    java实现RTF文件查看器(附带源码)

    这篇文章主要介绍了一个基于 Java Swing 的 RTF 文件查看器,既可作为轻量级桌面应用,也可嵌入到更大规模的管理系统中,满足用户对 RTF 文档的即时预览、样式保真和简单导航需求
    2025-06-06
  • Java中5种输出换行方式小结

    Java中5种输出换行方式小结

    在Java中,输出换行符是一项非常基本的操作,它在控制台中输出文本时非常常见,本文主要介绍了Java中5种输出换行方式小结,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • java定时任务的实现方法

    java定时任务的实现方法

    java定时任务的实现方法,需要的朋友可以参考一下
    2013-03-03
  • centos7如何通过systemctl启动springboot服务代替java -jar方式启动

    centos7如何通过systemctl启动springboot服务代替java -jar方式启动

    这篇文章主要介绍了centos7如何通过systemctl启动springboot服务代替java -jar方式启动,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-01-01
  • Springboot整合LangChain4j 全流程

    Springboot整合LangChain4j 全流程

    LangChain4j是一个专为Java生态打造的大语言模型应用开发框架,支持多种模型提供商,具备丰富的功能模块,如对话记忆、RAG管道支持、结构化输出等,这篇文章给大家介绍Springboot整合LangChain4j的全流程,感兴趣的朋友跟随小编一起看看吧
    2026-05-05
  • 使用Filter拦截器如何实现请求跨域转发

    使用Filter拦截器如何实现请求跨域转发

    这篇文章主要介绍了使用Filter拦截器如何实现请求跨域转发,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08

最新评论