SpringBoot監(jiān)聽Nacos動(dòng)態(tài)修改日志級(jí)別的操作方法
線上系統(tǒng)的日志級(jí)別一般都是 INFO 級(jí)別,有時(shí)候需要查看 WARN 級(jí)別的日志,所以需要?jiǎng)討B(tài)修改日志級(jí)別。微服務(wù)項(xiàng)目中使用 Nacos 作為注冊中心,我們可以監(jiān)聽 Nacos 配置,修改日志級(jí)別。
一、pom文件
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.18</version>
</dependency>
<!--注冊中心客戶端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2021.0.4.0</version>
</dependency>
<!--配置中心客戶端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2021.0.4.0</version>
</dependency>
<!--Lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>二、項(xiàng)目配置文件增加如下內(nèi)容
nacos:
config:
# 配置文件
filename: nacos-provider-log-level.json
# 配置GROUP
group: DEFAULT_GROUP
# 配置項(xiàng)key
log:
level: log.level三、日志配置文件
{
"log.level":"info"
}
四、日志監(jiān)聽類
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.api.NacosFactory;
import com.alibaba.nacos.api.PropertyKeyConst;
import com.alibaba.nacos.api.config.ConfigService;
import com.alibaba.nacos.api.config.listener.Listener;
import com.alibaba.nacos.api.exception.NacosException;
import com.meng.backend.service.LogLevelChangeService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct;
import java.util.Properties;
import java.util.concurrent.Executor;
/**
* @Author: meng
* @Description: 監(jiān)聽Nacos
* @Date: 2023/6/5 9:52
* @Version: 1.0
*/
@Slf4j
@Configuration
public class LoggerConfigListener {
/**
* 配置中心地址
*/
@Value("${spring.cloud.nacos.discovery.server-addr}")
private String serverAddr;
/**
* 命名空間ID
*/
// @Value("${nacos.config.namespace}")
// private String namespace;
/**
* 配置文件
*/
@Value("${nacos.config.filename}")
private String dataId;
/**
* 配置GROUP
*/
@Value("${nacos.config.group}")
private String group;
/**
* 配置項(xiàng)key
*/
@Value("${nacos.config.log.level}")
private String logLevelName;
@Autowired
private LogLevelChangeService logLevelChangeService;
/**
* 動(dòng)態(tài)修改日志級(jí)別
*/
@PostConstruct
public void init() {
try {
log.info("init NacosConfigListener start...");
Properties properties = new Properties();
properties.put(PropertyKeyConst.SERVER_ADDR, serverAddr);
// properties.put(PropertyKeyConst.NAMESPACE, namespace);
ConfigService configService = NacosFactory.createConfigService(properties);
String content = configService.getConfig(dataId, group, 5000);
if (StrUtil.isBlank(content)) {
log.info("log config is empty");
return;
}
log.info("log config is :{}", content);
configService.addListener(dataId, group, new Listener() {
@Override
public void receiveConfigInfo(String configInfo) {
try {
JSONObject jsonObject = JSONObject.parseObject(configInfo);
Object levelObj = jsonObject.get(logLevelName);
if (levelObj != null) {
logLevelChangeService.changeLogLevel(levelObj.toString());
}
}
catch (Exception e) {
log.error("receiveConfigInfo exception:", e);
}
}
@Override
public Executor getExecutor() {
return null;
}
});
log.info("init NacosConfigListener end...");
}
catch (NacosException e) {
log.error("NacosConfigListener exception:{}", e.getMessage());
}
}
}五、日志動(dòng)態(tài)修改服務(wù)類
/**
* @Author: meng
* @Description: 動(dòng)態(tài)調(diào)整日志級(jí)別
* @Date: 2023/6/5 9:56
* @Version: 1.0
*/
public interface LogLevelChangeService {
boolean changeLogLevel(String level);
}import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import com.meng.backend.service.LogLevelChangeService;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
/**
* @Author: meng
* @Description: 動(dòng)態(tài)調(diào)整日志級(jí)別
* @Date: 2023/6/5 9:56
* @Version: 1.0
*/
@Slf4j
@Service
public class LogLevelChangeServiceImpl implements LogLevelChangeService {
@Override
public boolean changeLogLevel(String level) {
try {
log.info("level:{}", level);
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
Logger logger = loggerContext.getLogger("ROOT");
switch (level) {
case "trace":
logger.setLevel(Level.TRACE);
break;
case "debug":
logger.setLevel(Level.DEBUG);
break;
case "info":
logger.setLevel(Level.INFO);
break;
case "warn":
logger.setLevel(Level.WARN);
break;
case "error":
logger.setLevel(Level.ERROR);
break;
default:
break;
}
return true;
}
catch (Exception e) {
log.error("changeLogLevel exception:", e);
return false;
}
}
}到此這篇關(guān)于SpringBoot監(jiān)聽Nacos動(dòng)態(tài)修改日志級(jí)別的文章就介紹到這了,更多相關(guān)SpringBoot動(dòng)態(tài)修改日志級(jí)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
spring導(dǎo)入framework報(bào)紅問題
這篇文章主要介紹了spring導(dǎo)入framework報(bào)紅問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
java實(shí)現(xiàn)jdbc查詢結(jié)果集result轉(zhuǎn)換成對(duì)應(yīng)list集合
本文給大家匯總介紹了java實(shí)現(xiàn)jdbc查詢結(jié)果集result轉(zhuǎn)換成對(duì)應(yīng)list集合,十分的簡單,有相同需求的小伙伴可以參考下。2015-12-12
SpringBoot項(xiàng)目開發(fā)常用技術(shù)整合
今天給大家分享springboot項(xiàng)目開發(fā)常用技術(shù)整合,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-08-08
Java實(shí)現(xiàn)將Boolean轉(zhuǎn)為Json對(duì)象的方法
在Java中,將boolean值轉(zhuǎn)換為JSON對(duì)象通常涉及使用JSON庫,例如org.json或Gson,這里我們將使用org.json庫來進(jìn)行詳細(xì)演示,這個(gè)庫提供了簡單且直觀的方法來創(chuàng)建和操作JSON對(duì)象,需要的朋友可以參考下2024-11-11
詳解Spring Boot讀取配置文件與配置文件優(yōu)先級(jí)
這篇文章主要介紹了詳解Spring Boot讀取配置文件與配置文件優(yōu)先級(jí),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08
關(guān)于Poi讀取Excel引發(fā)內(nèi)存溢出問題的解決方法
這篇文章主要給大家介紹了關(guān)于Poi讀取Excel引發(fā)內(nèi)存溢出問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08
SpringCloud使用Nacos保存和讀取變量的配置方法
在使用SpringCloud開發(fā)微服務(wù)時(shí),經(jīng)常會(huì)遇到一些比較小的后臺(tái)參數(shù)配置,這些配置不足以單獨(dú)開一張表去存儲(chǔ),而且其他服務(wù)會(huì)讀取該參數(shù),這篇文章主要介紹了SpringCloud使用Nacos保存和讀取變量,需要的朋友可以參考下2022-07-07
java實(shí)現(xiàn)簡單控制臺(tái)通訊錄
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡單控制臺(tái)通訊錄,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02

