slf4j常用配置文件读取

news2024/11/24 5:07:58

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作为默认配置文件的实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/114948.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VS coda C++、python运行与Dbug配置

首先新建终端 一次性使用C方法 检查C编译器是否存在 which g可见位置存在于:/usr/bin/g 一次性命令格式: 使用json配置文件 运行C方法(推荐): 根据你查找的g的位置来决定 使用配置好的tasks.json(C的…

QT入门-UI-信号槽

目录 一、QWidget类(重点) 二、子组件(掌握) 三、样式表(熟悉) 一、什么是信号槽? 二、信号槽的连接方式 2.1 自带信号→自带槽 2.2 自带信号→自定义槽 2.3 自定义信号 三、传参方式 3.1 成员变…

C#语言实例源码系列-伪装文件

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册 👉关于作者 众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中…

Redis分布式锁存在的问题

假设有这样一个场景,在一个购票软件上买一张票,但是此时剩余票数只有一张或几张,这个时候有几十个人都在同时使用这个软件购票。在不考虑任何影响下,正常的逻辑是首先判断当前是否还有剩余的票,如果有,那么…

Spring5.3.0源码下载

目录源码下载环境配置import into idea修改配置gradle-wapper.propertiesbuild.gradleSetting Gradlerefresh Gradle写一个小dome源码研究心得源码下载 Spring5.3.0 Download Address 我们只需要下载zip就行了, 如果忘记了这个地址,可以在Spring Offici…

网络技术——网络运维工程师必会的网络知识(3)(详细讲解)

作者简介:一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.网络层协议与应用 1.网络层的功能 2.IP数据包格式 3.广播与…

100天精通Python(数据分析篇)——第70天:Pandas常用排序、排名方法(sort_index、sort_values、rank)

文章目录每篇前言一、按索引排序:sort_index()1. Series类型排序1)升序2)降序2. DataFrame类型排序1)按行索引排序2)按列索引排序二、按值排序:sort_values()1. Series类型排序1)升序2&#xff…

冻结集合:不可能增删frozenset()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 冻结集合:不可能增删 frozenset() 选择题 对于以下python代码表述错误的一项是? a{1,2} print("【显示】a",a) a.add(3) print("【执行】a.add(3)【显示】a"…

【现代机器人学】学习笔记七:开链动力学(前向动力学Forward dynamics 与逆动力学Inverse dynamics)

这节的内容主要讲述机器人动力学的内容。相对于本书其他部分运动学内容相比,把动力学一下子合成了一章。看完以后有三个感受: 1.本章难度相对其他章节较大,因此需要反复去看,以求对重要内容的眼熟,不求全部记住&#…

Java window多环境配置

目录JDK版本下载配置内容描述创建JAVA_HOME在Path配置版本切换效果JDK版本下载 Java8 Download address 这个是Java8 的下载地址,下载是要登录的,自己花费一点时间去注册。如果想要下载其它版本的JDK,请看下面的图,然后你就可以看…

QT数据库-网络编程-打包

目录 一、讲解之前 二、数据库基本操作 三、模糊查询 二、编程之前 三、通信结构 一、设置应用图标(熟悉) 二、Debug和Release模式(掌握) 三、动态链接库(掌握) 四、打包(熟悉) 一、…

FastDDS(10)Transport Layer传输层

传输层在DDS实体之间提供通信服务,负责通过物理传输实际发送和接收消息。DDS层将此服务用于用户数据和发现流量通信。然而,DDS层本身是独立于传输的,它定义了一个传输API,可以运行在实现该API的任何传输插件上。这样,它就不局限于特定的传输,应用程序可以选择最适合其需求…

公众号开发(4) —— 使用Senparc.Weixin SDK进行模板消息推送

微信公众号支持推送模板消息给特定用户,只要获取到公众号用户的openid向微信提供的接口发送post请求即可向特定用户推送模板消息,以下记录简单记录使用Senparc.Weixin SDK进行模板消息推送的过程。 1 模板消息建立 在微信公众号测试账号中添加如下消息…

数据结构之排序【冒泡排序和快速排序之一的实现及分析】内含动态演示图

引言: 今天分享一下一点小事迹,自从从学校回到家里,我已经好久没睡上一个好觉了,因为真的冷,莫名被窝总是感觉很冷,然后穿着袜袜的脚也是冰凉,所以每次早晨要起床的时候总是感觉非常的冷&#…

shell基础使用

一、hello world 首先建立一个tmux vim test.sh //再创建一个test.sh文件 进入文件后,创建一个如下命令,指明bash为脚本解释器 #! /bin/bash //相当与c头文件echo "hello world"运行方式 1.作为可执行文件 acs9e0ebfcd82d7:~$ chmod x test.s…

我是如何将2千万StackOverflow问答翻译成中文的?

大家好!大家觉得如果需要翻译SO上全部问答可以怎么做呢?我讲讲我是怎么的,大家看看做得怎么样。 自我介绍 我是一名有10年开发经验的老程序员。做过大数据,做过Java程序员,也做过算法工程师,目前是一名大厂…

Spring Security的项目中集成JWT Token令牌安全访问后台API

Spring Security的项目中集成JWT Token令牌安全访问后台API引言JWT 简介jwt token 的适用场景jwt 的结构完整jwtjwt 的使用方式客户端获取jwt令牌访问受保护资源的具体流程Spring Security 安全框架下使用jwt token新建一个spring boot项目加入spring security 和 jwt 相关依赖…

五、传输层(二)UDP

目录 2.1 UDP概述 2.2 UDP的首部格式 2.3 UDP校验 2.1 UDP概述 UDP无须建立连接。因此不会引入建立连接的时延。 UDP为无连接状态。因此当服务器使用UDP时,一般能支持更多的活动客户机。 UDP分组首部仅有8B的开销,而TCP有20B的首部开销。 应用层…

后端思维篇:如何抽个上报模板

前言 大家好,我是田螺。 我的后端思维专栏好久没更新啦,本文是后端思维专栏的第六篇哈。我的整个后端思维专栏都是跟日常工作相关的哈。 最近刚好优化了安全上报这块的代码,抽了一个基础模板,看起来挺优雅的。所以今天手把手教…

〖产品思维训练白宝书 - 产品思维认知篇⑤〗- 学习 [产品思维] 需要做哪些准备?

大家好,我是 哈士奇 ,一位工作了十年的"技术混子", 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 💬 人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。💬 &#x1f4e…