配合 @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");
}
}