老蒋的知识库

  • 首页
  • 文章归档
  • 关于页面

  • 搜索

Nacos 小技巧

发表于 2023-09-25 | 分类于 Java | 0 | 阅读次数 54

配合 @Slf4j 动态修改日志输出等级

bootstrap.yml 添加配置Nacos共享配置spring.cloud.nacos.config.shared-configs: application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension},并设置为动态刷新refresh: true

# Spring
spring: 
  application:
    # 应用名称
    name: app
  profiles:
    # 环境配置
    active: @profiles.active@
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: @nacos.server@
      config:
        # 配置中心地址
        server-addr: @nacos.server@
        # 配置文件格式
        file-extension: yml
        # 共享配置
        shared-configs:
          - data-id: application.${spring.cloud.nacos.config.file-extension}
          
          # 看这里,看这里,看这里,看这里,看这里,看这里,看这里
          - data-id: application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
            refresh: true # 动态刷新,默认false

在Nacos中根据环境的不同添加 application-dev.yml、application-test.yml、application-pro.yml 等不同的配置文件,并添加以下配置,每次就会动态刷新日志等级。

# logging日志
logging:
  level:
  # 改这里,就会动态更新日志等级
    com.jagger.*: DEBUG

修改Nacos配置文件,触发自定义触发器更新系统配置

添加maven包

        <!-- https://mvnrepository.com/artifact/com.alibaba.boot/nacos-config-spring-boot-starter -->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>nacos-config-spring-boot-starter</artifactId>
            <version>0.2.12</version>
        </dependency>

例如这里通过读取配置文件改变日志等级(演示配置修改触发自定义触发器,日志等级热更新用上面法子就好了)


import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import com.alibaba.nacos.api.config.annotation.NacosConfigListener;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.stereotype.Service;

import java.util.Properties;


@Service
@Slf4j
public class LogConfigListener {
    public static final String LOGGER_LEVEL_CONFIG = "logging.level.";
    public static final String PACKAGE_NAME = "com.demo";

    @NacosConfigListener(dataId = "application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}")
    public void testConfigChange(String config) {
        log.debug("debug");
        log.info("info");
        log.warn("warn");
        log.error("error");
        LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
        Logger logger = loggerContext.getLogger(PACKAGE_NAME);
        logger.setLevel(Level.ERROR);
        log.debug("debug");
        log.info("info");
        log.warn("warn");
        log.error("error");
        logger.setLevel(Level.DEBUG);
        log.debug("debug");
        log.info("info");
        log.warn("warn");
        log.error("error");

		// 读取配置文件改变日志等级
        YamlPropertiesFactoryBean yamlFactory = new YamlPropertiesFactoryBean();
        yamlFactory.setResources(new ByteArrayResource(config.getBytes()));
        Properties commonsProperties = yamlFactory.getObject();
        log.debug(commonsProperties.toString());
        String loggerConfig = commonsProperties.getProperty(LOGGER_LEVEL_CONFIG + PACKAGE_NAME);
        log.debug("logger配置," + PACKAGE_NAME + ":" + loggerConfig);

        logger.setLevel(Level.toLevel(loggerConfig));
        log.debug("debug");
        log.info("info");
        log.warn("warn");
        log.error("error");
    }
}

  • 本文作者: jagger
  • 本文链接: /archives/nacos-xiao-ji-qiao
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
Java Spring 公共组件开发与自动装配
Visual Studio 2022 的坑
jagger

jagger

66 日志
31 分类
0 标签
Creative Commons
0%
© 2026 jagger
由 Halo 强力驱动