Springboot集成magic-api

news/2025/1/15 18:44:08/

目录

1、前言

2、springboot集成magic-api

2.1、添加maven依赖

2.2、application.yml配置

2.3、编写测试接口

2.4、启动程序,访问接口

2.5、magic-api脚本

3、magic-api其他语法

4、注意事项


1、前言

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

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

  1. 直接重启程序
  2. 使用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也有其特长,可以双管齐下,取长补短吧。

 


http://www.ppmy.cn/news/327541.html

相关文章

C++ 参数的三种传递方式和应用场景

C 参数的三种传递方式分别是值传递、指针传递和引用传递。 值传递 值传递的实质 将实参的值&#xff08;a、b&#xff09;复制到形参(m、n)相应的存储单元中&#xff0c;即形参和实参分别占用不同的存储单元。 值传递的特点 值传递的特点是单向传递&#xff0c;即主调函数…

游戏耳机什么牌子音质好?音质超好的耳机推荐

玩手游的时候&#xff0c;最讨厌的是画面变了&#xff0c;耳机里面的声音还没变&#xff0c;导致“听声辩位”的功能完全无法实现&#xff0c;让游戏体验变得非常差。还好我最近找到了四款适合吃鸡用的蓝牙耳机&#xff0c;低延迟的性能让吃鸡可以音画同步&#xff0c;这样的王…

打电话用蓝牙耳机什么牌子好?打电话清晰的蓝牙耳机推荐

随着蓝牙耳机的普及&#xff0c;我们可以享受到沉浸式的音乐。在不打扰任何人的情况下&#xff0c;尽情的享受&#xff0c;使用蓝牙耳机有时候避免不了来电&#xff0c;为了保证通话的清晰&#xff0c;许多人在选购的时候也会更加的看重麦克风&#xff0c;下面小编整理了几款打…

无线蓝牙耳机什么牌子的好、配置比较高的蓝牙耳机

现在真无线蓝牙耳机越来越受到消费者的欢迎&#xff0c;自从苹果的一代airpods发布以来蓝牙耳机行业一直非常的火热。为了推进真无线耳机的发展&#xff0c;各大手机厂商也在有意的取消3.5mm耳机接口&#xff0c;推出自家的真无线耳机产品。无线、自由成了真无线耳机的代名词&a…

什么品牌的运动耳机好、运动耳机排名

运动蓝牙耳机对于喜欢做运动的人来说是不可能缺少的&#xff0c;特别是喜欢路跑的人&#xff0c;一个人跑步怎么总感觉有点乏味并且孤单。这时候佩戴上你的运动蓝牙耳机&#xff0c;整个世界都是你的&#xff0c;迎着微风&#xff0c;尽情享受没有束缚的自在感觉。那么我们应该…

【二十七】springboot之通过threadLocal+参数解析器实现同session一样保存当前登录信息的功能

springboot篇章整体栏目&#xff1a; 【一】springboot整合swagger&#xff08;超详细 【二】springboot整合swagger&#xff08;自定义&#xff09;&#xff08;超详细&#xff09; 【三】springboot整合token&#xff08;超详细&#xff09; 【四】springboot整合mybatis…

互联网卡和正常卡有什么区别

互联网流量卡&#xff0c;国内运营商联合互联网公司上线了上百款互联网套餐&#xff0c;这类型的手机流量卡使用起来还是非常的实惠的&#xff0c;每个月的资费是非常的便宜&#xff0c;价格月租基本上在 5 元-30 元不等。 SIM 互联网套餐是运营商与各大互联网大咖联合推出的专…

在读大学生创业历程,350元起家到现在将近40万元的积蓄(2)

作者&#xff1a;zycbsc 回复日期&#xff1a;2008-9-10 11:51:17  楼主只是脾气不太好&#xff0c;算是性格上有点小小的缺陷吧&#xff0c;但是人家有头脑&#xff0c;反应快&#xff0c;有大局观&#xff0c;还会逆向思维。楼主说“我不写了&#xff0e;你们爱怎么怎么去…