当前位置:   article > 正文

01. Springboot集成magic-api

magic-api

目录

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依赖

  1. <dependency>
  2. <groupId>org.ssssssss</groupId>
  3. <artifactId>magic-api-spring-boot-starter</artifactId>
  4. <version>2.1.0</version>
  5. </dependency>

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

2.2、application.yml配置

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

2.3、编写测试接口

  1. @Slf4j
  2. @RestController
  3. @RequestMapping("test")
  4. public class TestController {
  5. @GetMapping("index")
  6. public String index(){
  7. // trace 级别日志
  8. LOGGER.trace("-------trace------");
  9. // debug 级别日志
  10. LOGGER.debug("-------debug------");
  11. // info 级别日志
  12. LOGGER.info("-------info------");
  13. // warn 级别日志
  14. LOGGER.warn("-------warn------");
  15. // error 级别日志
  16. LOGGER.error("-------error------");
  17. return "ok";
  18. }
  19. }

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"编辑框内使用如下脚本:

  1. import org.slf4j.Logger;
  2. import org.slf4j.LoggerFactory;
  3. import ch.qos.logback.classic.Level;
  4. import ch.qos.logback.classic.LoggerContext;
  5. var levelName = "debug";
  6. var packageName = "com.xxx";
  7. LoggerFactory.getILoggerFactory().getLogger(packageName).setLevel(Level.toLevel(levelName));
  8. return "OK";

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

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

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

3、magic-api其他语法

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

简介 | magic-api

这里只是抛砖引玉而已。

4、注意事项

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/31460
推荐阅读
  

闽ICP备14008679号