Springboot nacos实现日志级别动态调整

 

文章目录

前言

一、日志级别

1.ERROR 

2.WARN 

3.INFO 

4.DEBUG 

二、在nacos中配置日志级别控制信息

1.nacos配置中心添加日志级别控制配置信息

2.创建nacos监听,实现日志级别动态刷新

3.通过一个简单的dubbo接口,看下效果

4.Springboot启动类,通过@NacosPropertySource注解加载nacos配置。

总结


前言

通常我们经常遇到生产环境产生大量日志文件,从而导致空间被过多占用、检索关键信息浪费时间等问题。解决这类问题的方案挺多,比如日志切割策略配置、日志文件压缩,备份到NFS,服务器本地通过策略删除等。除了以上方式,我们还可以通过日志级别控制日志输出。


 

一、日志级别

Log4j日志按重要性程度由高到低分位4级:ERROR,WARN,INFO,DEBUG

日志级别越高,打印出的日志越少。

生产环境日志界别建议调高,避免打印大量日志占用服务空间。

1.ERROR 

error级别只记录系统逻辑出错、异常、或者重要的错误信息。如非必要,请不要在打出 error级别,避免频繁报警。

2.WARN 

warn级别日志属于系统警告信息。系统能继续运行, 但是必须引起关注,需要进行检查和调整。

3.INFO 

info级别日志主要记录有意义的事件信息,在理想情况下, INFO的日志信息要能让所有开发人员和系统管理员理解, 并从日志信息中能知道系统当前的运行状态。

4.DEBUG 

debug级别日志主要记录调试信息,可记录详细的业务处理到哪一步了,以及当前的变量状态。比如远程接口调用入参以及出参,响应时间等调试类信息。

二、在nacos中配置日志级别控制信息

1.nacos配置中心添加日志级别控制配置信息

设置logging.level.name和logging.level

2.创建nacos监听,实现日志级别动态刷新

代码如下(示例):

@Configuration
public class LoggingLevelRefresher{
    private final static Logger log = LoggerFactory.getLogger(LoggingLevelRefresher.class);
    private final static String DATA_ID="pre-loan-provider-nacos";
    private final static String GROUP_ID="pre-loan";
    @NacosValue(value = "${logging.level.name:cn.fl.preloan}",autoRefreshed = true)
    private String loggerName;
    @NacosValue(value = "${logging.level:info}",autoRefreshed = true)
    private String loggerLevel;
    @Resource
    private LoggingSystem loggingSystem;
    @NacosConfigListener(dataId = DATA_ID,groupId = GROUP_ID)
    public void onChangeValue(String value) throws BaseException {
        log.info("received changed value = {}",value);
        LogLevel logLevel = LogLevel.valueOf(loggerLevel.toUpperCase());
        loggingSystem.setLogLevel(loggerName,logLevel);
        log.info("changed {} log level to:{}", loggerName, loggerLevel);
    }
}

注意:

通过@NacosValue读取nacos配置项内容,记得设置默认值,autoRefreshed=true开始自动刷新内容读取。

通过@NacosConfigListener注解方式,实现nacos配置内容的变化监听。onChangeValue方法中通过Springboot提供的LogginSystem操作日志级别的变更即可。

3.通过一个简单的dubbo接口,看下效果

//dubbo api 定义
public interface SwaggerDemoService {
    List<SwaggerDemoDTO> query(String usedFor);
}

//dubbo provider 实现
@Slf4j
public class SwaggerDemoServiceImpl implements SwaggerDemoService {
    @Override
    public List<SwaggerDemoDTO> query(String usedFor) {
        log.info("info usedFor = {}",usedFor);
        log.debug("debug usedFor = {}",usedFor);
        log.warn("warn usedFor={}",usedFor);
        log.error("error usedFor={}",usedFor);
        return list;
    }
}

 服务启动默认日志级别为info,执行第一次query接口请求,日志打印如下:

 这时候去调整nacos日志级别为warn,预期应该只有warn和error级别的日志打印,修改nacos日志配置发布后,首先监听到配置变更,监听日志如下:

[INFO][pool-6-thread-1] - cn.fl.preloan.config.LoggingLevelRefresher.onChangeValue(LoggingLevelRefresher.java:41) - received changed value = logging.level.name=cn.fl.preloan
logging.level=warn

此时第二次执行query接口请求,日志打印如下,符合预期:

最后我们把nacos日志级别调整为debug级别,第三次请求query接口,预期会打印debug、info、warn、error级别日志,测试如下:

4.Springboot启动类,通过@NacosPropertySource注解加载nacos配置。

@NacosPropertySource(dataId = "pre-loan-provider-nacos",groupId = "pre-loan",autoRefreshed = true)

通过该注解可以同时加载多个nacos配置。


总结

以上就是今天要讲的内容,本文仅仅简单介绍了日志级别控制的实现方式,我们平时工作中合理分配日志级别可以有效的减少日志文件的空间占用,通过动态变更日志级别也可以方便的排查线上问题。

nacos配置中心的实现原理以及LoggingSystem的实现原理这里先不做过多介绍,后面会更详细的篇章来介绍。

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Spring Boot中,也可以使用Nacos实现全局动态刷新配置文件。Nacos是一个开源的动态服务发现和配置管理平台,它可以作为配置中心来管理和提供应用程序的配置文件,并支持动态刷新配置文件。 下面是实现全局动态刷新配置文件的步骤: 1. 引入Nacos依赖 在pom.xml文件中加入以下依赖: ``` <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> ``` 2. 配置Nacos 在application.properties文件中配置Nacos: ``` spring.cloud.nacos.config.server-addr=<nacos-server-address> spring.cloud.nacos.config.namespace=<nacos-namespace> spring.cloud.nacos.config.prefix=<nacos-config-prefix> spring.cloud.nacos.config.file-extension=<nacos-config-file-extension> ``` 其中,`<nacos-server-address>`是Nacos Server的地址,`<nacos-namespace>`是Nacos的命名空间,`<nacos-config-prefix>`是配置文件的前缀,`<nacos-config-file-extension>`是配置文件的扩展名。 3. 配置客户端应用程序 在客户端应用程序中,需要引入以下依赖: ``` <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> ``` 同时,在bootstrap.properties文件中配置客户端应用程序: ``` spring.application.name=my-app spring.cloud.nacos.config.server-addr=<nacos-server-address> spring.cloud.nacos.config.namespace=<nacos-namespace> spring.cloud.nacos.config.prefix=<nacos-config-prefix> spring.cloud.nacos.config.file-extension=<nacos-config-file-extension> ``` 其中,`my-app`是应用程序的名称,`<nacos-server-address>`、`<nacos-namespace>`、`<nacos-config-prefix>`、`<nacos-config-file-extension>`与Nacos配置一致。 4. 配置动态刷新 在客户端应用程序中,需要配置动态刷新。可以在application.properties文件中添加以下配置: ``` management.endpoints.web.exposure.include=* management.endpoint.refresh.enabled=true ``` 其中,`management.endpoints.web.exposure.include=*`是开启所有的Actuator端点,`management.endpoint.refresh.enabled=true`是开启动态刷新功能。 5. 发布配置文件 将应用程序的配置文件上传到Nacos中。 6. 动态刷新配置文件 在配置文件发生变化时,可以通过访问以下URL来触发动态刷新: ``` POST http://localhost:8080/actuator/refresh ``` 其中,`http://localhost:8080`是客户端应用程序的地址。 以上就是实现全局动态刷新配置文件的方法。通过Nacos动态刷新功能,可以方便地管理和更新应用程序的配置文件。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值