[SpringBoot] 通过EnvironmentPostProcessor接口隐式修改配置 -- 修改日志级别

EnvironmentPostProcessor接口

    继承该接口,可以在项目启动初期对配置做一些修改,根据最近的一个使用场景做了一个小结;
    1.场景简述如下,在之前的一篇博客中有简单介绍,通过spring.factories来切换注册中心,遇到了一个问题,当使用Eureka作为注册中心的时候,配置中没有填写zookeeper的地址,此时可以正常注册到Eureka,但是zookeeper会循环不断的打印warn日志,我们可以在log4j2.xml文件中设置

<Logger name="org.apache.zookeeper" level="error"/>

来屏蔽这个包下的warn日志,但是这样不灵活,因为开发人员每次去修改不方便,而且提供的是基础jar包,是否可以在提供的jar里面完成这个工作呢?
    2.配置:
    除了在上面说的在配置文件限制指定包的日志级别之外,可不可以做成key-value的配置形式呢?查询资料,可以在bootstrap.properties文件中配置logging.level.com.nero=DEBUG,来限制一个包的日志级别,那么既然是可以通过配置的形式们就可以考虑用实现EnvironmentPostProcessor接口的方法;
    3.代码:
在resources/META-INF/spring.factories里面添加:

org.springframework.boot.env.EnvironmentPostProcessor=com.xxxx.MyEnvironmentPostProcessorZkLog

添加类文件:
@Component
public class MyEnvironmentPostProcessorZkLog implements EnvironmentPostProcessor {

    private static final String ZK_SERVER_KEY = "spring.cloud.zookeeper.connect-string";

    @Override
    public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {

        String zkConnectString = environment.getProperty(ZK_SERVER_KEY);

        //没有配置时,说明没有使用zk作为注册中心,那么就关闭warn及以下级别的日志,配置了,则不干预
        if (zkConnectString == null ) {
            HashMap<String, Object> map = new HashMap<>(1);
            map.put("logging.level.org.apache.zookeeper", "error");
            PropertySource source = new MapPropertySource("logLevelZk", map);
            environment.getPropertySources().addFirst(source);
        }
    }
}
    代码很清晰简单,先判断是否有spring.cloud.zookeeper.connect-string这项配置,如果有,那么什么都不做,如果没有,那么就关闭warn的日志级别;
    4.小结
    这里是个小案例,其实通过这样的思想,我们可以预处理很多情况,通过一些配置的情况,来添加甚至修改一些配置,比如可以将一些系统的默认配置给修改了,true改为false那样的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值