slf4j常用配置文件读取

slf4j常用配置文件读取

log4j2读取配置文件

日志现在一般都是使用slf4j作为接口、底层实现一般是用log4j2或者logback

我们先看下log4j2是如何读取配置文件的。

   implementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.19.0'

如果使用gradle的话。上面的代码就会导入slf4jlog4j2的相关依赖。

主要是在创建完org.apache.logging.log4j.core.LoggerContext后,会调用它的start–>reconfigure,在这里面读取配置文件,转化成Configuration对象。

调用的堆栈如下图:

在这里插入图片描述

具体会ConfigurationFactory.getConfiguration读取配置文件

1、读取环境变量log4j.configurationFile指定的路径。

2、读取环境变量log4j.configuration指定的路径。

3、继续在下面的代码中查找配置文件

在这里插入图片描述

通过PropertiesConfigurationFactoryYamIConfigurationFactoryJsonConfigurationFactoryXmlConfigurationFactory

       private Configuration getConfiguration(final LoggerContext loggerContext, final boolean isTest, final String name) {
            final boolean named = Strings.isNotEmpty(name);
            final ClassLoader loader = LoaderUtil.getThreadContextClassLoader();
         	  //这里的getFactories()会获取配置文件处理工厂。
            //分别是PropertiesConfigurationFactory、amIConfigurationFactory、sonConfigurationFactory、XmlConfigurationFactory
            for (final ConfigurationFactory factory : getFactories()) {
                String configName;
              	//处理前缀
                final String prefix = isTest ? factory.getTestPrefix() : factory.getDefaultPrefix();
                //处理后缀
                final String [] types = factory.getSupportedTypes();
                if (types == null) {
                    continue;
                }

                for (final String suffix : types) {
                    if (suffix.equals(ALL_TYPES)) {
                        continue;
                    }
                    //拼接配置文件路径
                    configName = named ? prefix + name + suffix : prefix + suffix;

                    final ConfigurationSource source = ConfigurationSource.fromResource(configName, loader);
                 
                }
            }
            return null;
        }

在上面就会依次去拼接配置文件路径,在类路径上去查找配置文件。

这里的最后一个入参name是对应类加载器的hashcode转成16进制的字符串表示。假设这个name的值是5c29bfd。那就依次会在类路径查找如下配置文件log4j2-test5c29bfd.properties、log4j2-test5c29bfd.yml、log4j2-test5c29bfd.yaml、log4j2-test5c29bfd.json、log4j2-test5c29bfd.jsn、log4j2-test5c29bfd.xml、log4j2-test.properties、log4j2-test.yml、log4j2-test.yaml、log4j2-test.json、log4j2-test.jsn、log4j2-test.xml、log4j25c29bfd.properties、log4j25c29bfd.yml、log4j25c29bfd.yaml、log4j25c29bfd.json、log4j25c29bfd.jsn、log4j25c29bfd.xml、log4j2.properties、log4j2.yml、log4j2.yaml、log4j2.json、log4j2.jsn、log4j2.xml

如果在环境变量中设置了log4j2.debug=true,那么在控制台中也能看到查找配置文件的详细日志。

如在代码开始位置设置了System.setProperty("log4j2.debug","true");。就可以看到如下日志。

在这里插入图片描述

logback读取配置文件

implementation 'ch.qos.logback:logback-classic:1.2.11'

如果使用gradle的话。上面的代码就会导入slf4jlogback的相关依赖。

主要位置是在ch.qos.logback.classic.util.ContextInitializer.autoConfig()方法加载配置文件的。

调用堆栈如下图:

在这里插入图片描述

1、从环境变量logback.configurationFile指定的位置加载。

2、依次在类路径上查找logback-test.xmllogback.xml

3、用SPI的方式使用ServiceLoader.loadch.qos.logback.classic.spi.Configurator的实现。

4、如果上面几种方式都没找到就会创建ch.qos.logback.classic.BasicConfigurator作为默认配置文件的实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值