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

目录

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级别,而不需要重启服务器。那么今天再介绍另一个可以动态调整日志级别的工具magicapimagic-api

2、springboot集成magicapi

2.1、添加maven依赖

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

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

2.2、application.yml配置

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

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、magicapi脚本

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

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

 

创建完分组后,创建接口

创建后,在return “Hello magicapi编辑框内使用如下脚本

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、magicapi其他语法

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

简介 | magic-api

这里只是抛砖引玉而已。

4、注意事项

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

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

原文地址:https://blog.csdn.net/p793049488/article/details/131152515

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_46498.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注