Java日志体系概述

news/2024/9/20 7:00:19

一. 日志体系分类

1.1 功能分类

1.2 jar包分类

二. 以log4j2为例

2.1 slf4j-api的初始化动态绑定过程

一. 日志体系分类

1.1 功能分类

  • 门面类
    • slf4j:Simple Logging Facade for Java,为java提供的简单日志Facade
  • 具体实现类
    • logback
    • log4j1
    • log4j2
    • jul:Java.Util.Logging
    • simple
    • nop
    • jcl:Jekarta Commons Logging

1.2 jar包分类

类别

jar包名

说明

门面类

slf4j-api

slf4j的门面

适配器类

log4j-1.2-api

log4j1—>log4j2

log4j-jcl

commons-logging到log4j的桥梁

jcl-over-slf4j

commons-logging 到slf4j的桥梁

slf4j-jdk14

slf4j到jdklog的桥梁,Jdk原生日志框架

slf4j-jcl

slf4j到commons-logging的桥梁

logback-slf4j

slf4j到logback的桥梁

 jul-to-slf4j

jul-java.util.logging到slf4j的桥梁

jcl-over-slf4j

commons-logging 到slf4j的桥梁

log4j-over-slf4j

log4j到slf4j的桥梁

slf4j-log4j12

slf4j到log4j1的桥梁

log4j-slf4j-impl

slf4j到log4j2的桥梁

实现类(以log4j2为例)

log4j-api、log4j-core

log4j2日志的核心实现包

  • Log4j-api是向外提供的接口层

  • log4j-core是具体实现层

二. 以log4j2为例

  • 通常,代码里都会通过 LoggerFactory.getLogger 来获取 Logger,该 Logger 来自于 slf4j-api 的类
    • slf4j-api这个jar包中,除了 LoggerFactory 这个类实现了动态初始化绑定的逻辑,剩下基本都是接口,用于给适配器实现

2.1 slf4j-api的初始化动态绑定过程

该初始化逻辑全部在 org.slf4j.LoggerFactory 中,入口为 performInitialization() ——> bind(),bind()方法中有三个主要逻辑

  • findPossibleStaticLoggerBinderPathSet():找到类加载器下 StaticLoggerBinder 的所有子类
  • reportMultipleBindingAmbiguity:如果找到多个实现类,打个日志
  • StaticLoggerBinder.getSingleton():随机选取一个StaticLoggerBinder.class来创建一个单例

  • findPossibleStaticLoggerBinderPathSet():
    • 获取LoggerFactory的类加载器:AppClassLoader
    • 在该类加载器下,寻找 "org/slf4j/impl/StaticLoggerBinder.class" 的实现类,即适配器类,见下图1
    • 见下图2,可以看到项目里找到了两个 StaticLoggerBinder 的实现类,一个是log4j1的,一个是log4j2的

  • reportMultipleBindingAmbiguity()
    • 如果找到多个匹配的,打日志

  • ​StaticLoggerBinder.getSingleton()
    • 随机选取一个
  • reportActualBinding(staticLoggerBinderPathSet)
    • 打印出真实绑定的


http://lihuaxi.xjx100.cn/news/2178322.html

相关文章

RAID配置实战

概念 raid磁盘阵列:可以用不同的硬盘分区,组成一个逻辑上的硬盘。具有高可用 raid级别: raid0 :条带化存储:数据分散在多个物理硬盘上的存储方式。利用多个磁盘并行读取和写入。存储性能和读写性能是最好的。没有冗…

【Linux系统】--- Linux内核日志等级详解

在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。 【Linux系统】--- Linux内核日志等级详解…

python使用modbustcp协议与PLC进行简单通信

AI应用开发相关目录 本专栏包括AI应用开发相关内容分享,包括不限于AI算法部署实施细节、AI应用后端分析服务相关概念及开发技巧、AI应用后端应用服务相关概念及开发技巧、AI应用前端实现路径及开发技巧 适用于具备一定算法及Python使用基础的人群 AI应用开发流程概…

2024-5-29 石群电路-17

2024-5-29,星期三,17:26,天气:晴,心情:晴.今天又是阳光明媚的一天,没有什么特别的事情发生,给女朋友做了好吃的,吃了西瓜,加油学习,嘻嘻嘻~~~~ 今…

【Windows系统】使用robocopy移动文件

起因 笔记本机械革命Z2 Air,有2个固态m.2插口,和1个机械硬盘插口。但是机械硬盘插口线没有走线空间,都折在一起压在硬盘底下了,导致有时候机械硬盘读不出来。所以买了块国产的2Tm.2接口固态硬盘,用于存储机械硬盘的文…

折戟AI搜索,谷歌是否已死?

随着科技的飞速发展,人工智能(AI)技术已经渗透到我们生活的方方面面,搜索引擎作为互联网的重要入口,其变革也势不可挡。谷歌,作为全球最大的搜索引擎公司,近年来在AI领域的布局与投入备受关注。…

渗透测试框架之CobaltStrike,Metasploit域名上线隐藏IP

概述 为什么要隐藏IP 在拿下了目标机之后,目标机在内网里面,使用msf或者CS时,用自己的VPS做服务器的话,导致很容易被溯源。 域名上线原理 当我们访问域名时会经过域名解析 域名解析就是域名到IP地址的转换过程,那么…

moviepy入门

1. 简介 由于恶心的工作和没有规划的部门安排,我被排到了算法部门,从事和算法没有半毛钱关系的业务上,也就是。。。搞视频。咋说呢?视频这东西我没有一点基础,还好有前人写好的代码,用的是moviepy和ffmpeg…