亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot監(jiān)聽Nacos動態(tài)修改日志級別的操作方法

 更新時間:2023年12月01日 15:09:17   作者:W_Meng_H  
線上系統(tǒng)的日志級別一般都是 INFO 級別,有時候需要查看 WARN 級別的日志,所以需要動態(tài)修改日志級別,微服務項目中使用 Nacos 作為注冊中心,我們可以監(jiān)聽 Nacos 配置,修改日志級別,這篇文章主要介紹了SpringBoot監(jiān)聽Nacos動態(tài)修改日志級別的操作方法,需要的朋友可以參考下

線上系統(tǒng)的日志級別一般都是 INFO 級別,有時候需要查看 WARN 級別的日志,所以需要動態(tài)修改日志級別。微服務項目中使用 Nacos 作為注冊中心,我們可以監(jiān)聽 Nacos 配置,修改日志級別。

一、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>

二、項目配置文件增加如下內容

nacos:
  config:
    # 配置文件
    filename: nacos-provider-log-level.json
	# 配置GROUP
    group: DEFAULT_GROUP
	# 配置項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;
	/**
	 * 配置項key
	 */
	@Value("${nacos.config.log.level}")
	private String logLevelName;
	@Autowired
	private LogLevelChangeService logLevelChangeService;
	/**
	 * 動態(tài)修改日志級別
	 */
	@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());
		}
	}
}

五、日志動態(tài)修改服務類

/**
 * @Author: meng
 * @Description: 動態(tài)調整日志級別
 * @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: 動態(tài)調整日志級別
 * @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;
		}
	}
}

到此這篇關于SpringBoot監(jiān)聽Nacos動態(tài)修改日志級別的文章就介紹到這了,更多相關SpringBoot動態(tài)修改日志級別內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解SpringBoot配置連接池

    詳解SpringBoot配置連接池

    本篇文章主要詳解SpringBoot配置連接池,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • springboot普通類中如何獲取session問題

    springboot普通類中如何獲取session問題

    這篇文章主要介紹了springboot普通類中如何獲取session問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • springboot的類加載器(org.springframework.boot.loader)過程詳解

    springboot的類加載器(org.springframework.boot.loader)過程詳解

    這篇文章主要介紹了springboot的類加載器(org.springframework.boot.loader),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Java接入支付寶授權第三方登錄的完整步驟

    Java接入支付寶授權第三方登錄的完整步驟

    不管是支付寶支付,還是微信支付,還是銀聯(lián)支付等,大部分的支付流程都是相似的,這篇文章主要給大家介紹了關于Java接入支付寶授權第三方登錄的相關資料,使用支付寶的沙盒環(huán)境示例,需要的朋友可以參考下
    2021-07-07
  • Spring容器的創(chuàng)建過程之如何注冊BeanPostProcessor詳解

    Spring容器的創(chuàng)建過程之如何注冊BeanPostProcessor詳解

    關于BeanPostProcessor 各位一定不陌生,今天整理的這篇文章總結了如何注冊BeanPostProcessor,文中有非常詳細的圖文示例,需要的朋友可以參考下
    2021-06-06
  • Java實現正則匹配 “1234567” 這個字符串出現四次或四次以上

    Java實現正則匹配 “1234567” 這個字符串出現四次或四次以上

    文章介紹了如何在Java中使用正則表達式匹配一個字符串四次或四次以上的出現,首先創(chuàng)建正則表達式,然后使用Pattern和Matcher類進行匹配和計數,通過示例代碼展示了如何實現這一功能,并解釋了匹配的整體次數和精確出現次數的邏輯,感興趣的朋友一起看看吧
    2025-02-02
  • 詳解如何在SpringBoot中優(yōu)雅地重試調用第三方API

    詳解如何在SpringBoot中優(yōu)雅地重試調用第三方API

    在實際的應用中,我們經常需要調用第三方API來獲取數據或執(zhí)行某些操作,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-12-12
  • 什么情況下會出現java.io.IOException?:?Broken?pipe這個錯誤以及解決辦法

    什么情況下會出現java.io.IOException?:?Broken?pipe這個錯誤以及解決辦法

    這篇文章主要介紹了什么情況下會出現java.io.IOException?:?Broken?pipe這個錯誤以及解決辦法的相關資料,這個錯誤表示通信另一端已關閉連接,常發(fā)生在客戶端關閉連接、網絡超時或資源不足等情況,文中將解決辦法介紹的非常詳細,需要的朋友可以參考下
    2024-10-10
  • 圖文詳解java反射機制及常用應用場景

    圖文詳解java反射機制及常用應用場景

    這篇文章主要為大家介紹了圖文詳解java反射機制及常用應用場景,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-03-03
  • java求解漢諾塔問題示例

    java求解漢諾塔問題示例

    漢諾塔問題的描述如下:有3根柱子A、B和C,在A上從上往下按照從小到大的順序放著一些圓盤,以B為中介,把盤子全部移動到C上。移動過程中,要求任意盤子的下面要么沒有盤子,要么只能有比它大的盤子。編程實現3階漢諾塔的求解步驟
    2014-02-02

最新評論