目錄
1、前言
2、springboot集成magic-api
2.1、添加maven依賴
2.2、application.yml配置
2.3、編寫測(cè)試接口
2.4、啟動(dòng)程序,訪問接口
2.5、magic-api腳本
3、magic-api其他語法
4、注意事項(xiàng)
1、前言
今天項(xiàng)目中遇到一個(gè)問題,springboot后端項(xiàng)目經(jīng)常使用log4j輸出日志,同時(shí)會(huì)配置相應(yīng)日志級(jí)別。但是由于開發(fā)過程中不經(jīng)意間都會(huì)log.info("xxxx")來打印日志,而線上級(jí)別也會(huì)控制在info級(jí)別。正常不會(huì)有什么問題,但是今天有個(gè)超長(zhǎng)報(bào)文傳輸,恰好日志在控制臺(tái)輸出了這段報(bào)文用作跟蹤。而log并沒有開啟緩存以及并行寫入,導(dǎo)致IO阻塞,程序無法正常響應(yīng)。
通常情況下,這種問題的解決措施為:
- 直接重啟程序
- 使用arths動(dòng)態(tài)調(diào)整日志級(jí)別
arths是個(gè)好工具,很適合用于線上排障,應(yīng)對(duì)該場(chǎng)景也可以直接動(dòng)態(tài)調(diào)整log級(jí)別,而不需要重啟服務(wù)器。那么今天再介紹另一個(gè)可以動(dòng)態(tài)調(diào)整日志級(jí)別的工具,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的相關(guān)依賴就不贅述了。
2.2、application.yml配置
magic-api:
web: /magic/web # magic-api控制臺(tái)訪問地址
resource: # magic-api數(shù)據(jù)存儲(chǔ)信息配置
location: workspace/magic/data # location表示使用本地文件存儲(chǔ),存儲(chǔ)路徑為工作目錄workspace/magic/data下
datasource: # datasource表示數(shù)據(jù)源存儲(chǔ),這里指定使用的數(shù)據(jù)源, datasource和location選擇一個(gè)
2.3、編寫測(cè)試接口
@Slf4j
@RestController
@RequestMapping("test")
public class TestController {
@GetMapping("index")
public String index(){
// trace 級(jí)別日志
LOGGER.trace("-------trace------");
// debug 級(jí)別日志
LOGGER.debug("-------debug------");
// info 級(jí)別日志
LOGGER.info("-------info------");
// warn 級(jí)別日志
LOGGER.warn("-------warn------");
// error 級(jí)別日志
LOGGER.error("-------error------");
return "ok";
}
}
2.4、啟動(dòng)程序,訪問接口
當(dāng)看到控制臺(tái)輸出如下信息,就是已經(jīng)啟動(dòng)成功了。
訪問接口:http://localhost:8083/test/index??梢钥吹饺罩敬蛴。?/p>
由于默認(rèn)日志級(jí)別是info,所以看到info以上級(jí)別的輸出。
2.5、magic-api腳本
打開magic-api控制臺(tái):http://192.168.0.109:8083/magic/web/index.html
左側(cè)菜單欄選擇接口,接著空白處右鍵創(chuàng)建分組:
?
創(chuàng)建完分組后,創(chuàng)建接口:
創(chuàng)建后,在return "Hello magic-api"編輯框內(nèi)使用如下腳本:
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,使用了默認(rèn)的logback,所以這里的impor實(shí)現(xiàn)類需要找對(duì)。不然沒有效果。
輸入后,點(diǎn)擊右上角的運(yùn)行按鈕。運(yùn)行完可以再次訪問測(cè)試接口地址。
可以看到日志級(jí)別調(diào)整為debug,而程序不用重啟。
3、magic-api其他語法
magic-api其實(shí)是通過JVM的script語言注入進(jìn)去,提供了其他豐富的功能。這里不贅述,也需要慢慢使用體會(huì)。其他的特性語法可以參考文檔:
簡(jiǎn)介 | magic-api
這里只是拋磚引玉而已。
4、注意事項(xiàng)
使用magic-api的時(shí)候需要注意,正因?yàn)槿绱朔奖愕墓δ芎吞匦裕绻Q(mào)然線上使用該插件,很容易導(dǎo)致被人而已攻擊注入。所以盡可能避免外網(wǎng)訪問,我們的處理措施是ng代理上直接不對(duì)外暴露,僅限于內(nèi)部研發(fā)排障使用。文章來源:http://www.zghlxwxcb.cn/news/detail-721479.html
相比這種需要集成在代碼中的使用方式,arths可能具有天然的優(yōu)勢(shì),但是magic-api也有其特長(zhǎng),可以雙管齊下,取長(zhǎng)補(bǔ)短吧。文章來源地址http://www.zghlxwxcb.cn/news/detail-721479.html
到了這里,關(guān)于01. Springboot集成magic-api的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!