Springboot集成magic-api的詳細過程
1、前言
今天項目中遇到一個問題,springboot后端項目經(jīng)常使用log4j輸出日志,同時會配置相應日志級別。但是由于開發(fā)過程中不經(jīng)意間都會log.info("xxxx")來打印日志,而線上級別也會控制在info級別。正常不會有什么問題,但是今天有個超長報文傳輸,恰好日志在控制臺輸出了這段報文用作跟蹤。而log并沒有開啟緩存以及并行寫入,導致IO阻塞,程序無法正常響應。
通常情況下,這種問題的解決措施為:
- 直接重啟程序
- 使用arths動態(tài)調整日志級別
arths是個好工具,很適合用于線上排障,應對該場景也可以直接動態(tài)調整log級別,而不需要重啟服務器。那么今天再介紹另一個可以動態(tài)調整日志級別的工具,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數(shù)據(jù)存儲信息配置
location: workspace/magic/data # location表示使用本地文件存儲,存儲路徑為工作目錄workspace/magic/data下
datasource: # datasource表示數(shù)據(jù)源存儲,這里指定使用的數(shù)據(jù)源, 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、啟動程序,訪問接口
當看到控制臺輸出如下信息,就是已經(jīng)啟動成功了。

訪問接口:http://localhost:8083/test/index??梢钥吹饺罩敬蛴。?/p>

由于默認日志級別是info,所以看到info以上級別的輸出。
2.5、magic-api腳本
打開magic-api控制臺:http://192.168.0.109:8083/magic/web/index.html

左側菜單欄選擇接口,接著空白處右鍵創(chuàng)建分組:


創(chuàng)建完分組后,創(chuàng)建接口:

創(chuàng)建后,在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實現(xiàn)類需要找對。不然沒有效果。

輸入后,點擊右上角的運行按鈕。運行完可以再次訪問測試接口地址。
可以看到日志級別調整為debug,而程序不用重啟。

3、magic-api其他語法
magic-api其實是通過JVM的script語言注入進去,提供了其他豐富的功能。這里不贅述,也需要慢慢使用體會。其他的特性語法可以參考文檔:
這里只是拋磚引玉而已。

4、注意事項
使用magic-api的時候需要注意,正因為如此方便的功能和特性,如果貿(mào)然線上使用該插件,很容易導致被人而已攻擊注入。所以盡可能避免外網(wǎng)訪問,我們的處理措施是ng代理上直接不對外暴露,僅限于內部研發(fā)排障使用。
相比這種需要集成在代碼中的使用方式,arths可能具有天然的優(yōu)勢,但是magic-api也有其特長,可以雙管齊下,取長補短吧。
相關文章
SpringBoot集成Session的實現(xiàn)示例
Session是一個在Web開發(fā)中常用的概念,它表示服務器和客戶端之間的一種狀態(tài)管理機制,用于跟蹤用戶在網(wǎng)站或應用程序中的狀態(tài)和數(shù)據(jù),本文主要介紹了SpringBoot集成Session的實現(xiàn)示例,感興趣的可以了解一下2023-09-09
java中JVM中如何存取數(shù)據(jù)和相關信息詳解
這篇文章主要介紹了JVM中如何存取數(shù)據(jù)和相關信息詳解,Java源代碼文件(.java后綴)會被Java編譯器編譯為字節(jié)碼文件,然后由JVM中的類加載器加載各個類的字節(jié)碼文件,加載完畢之后,交由JVM執(zhí)行引擎執(zhí)行。JVM中怎么存取數(shù)據(jù)和相關信息呢?,需要的朋友可以參考下2019-06-06
搭建Spring MVC和Vue3的應用程序的實現(xiàn)
本文主要介紹了搭建Spring MVC和Vue3的應用程序的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-11-11

