深入了解Java日志框架:JUL、Logback、Log4j及Log4j2的实现与应用

常用的日志记录实现

深入了解Java日志框架:JUL、Logback、Log4j及Log4j2的实现与应用

JUL(java util Logging) logback log4j log4j2

常用的原木幕墙

JCL slf4j

学习视频

七月

JUL(java util logging)是一个原生的 java 日志框架,不需要引用第三方库,相比其他日志框架更容易学习,可以在小型应用中灵活使用。

使用具体的使用方法查看测试用例

具体实施流程:

对数 4j

有关详细信息,请参阅代码 ()

Log4j 主要由 Logger、Appender 和 Layouts 组成

组成。

Logger 控制日志的输出级别以及是否输出日志

Appenders 指定日志的输出方式(输出到控制台、文件等)。

Layout 控制日志输出的格式

JCL :(已停用)。

原木立面

为什么你应该使用 Log Façade

1. 面试接口开发,不依赖特定的实现类,减少代码耦合

2. 项目可以通过导入不同的日志实现类,灵活切换日志框架

3. 统一 API,便于开发人员学习

4. 统一配置,方便管理项目日志开发

我的理解是,当项目需要更改日志框架时,可以灵活更改,无需更改 API,只需更改相应 LogFactory 的相应实现即可。,并且它有默认的加载顺序,如果要添加其他日志框架,则需要更改源码。

SLF4J

绑定日志的实现(export pom 即可完成操作,详见代码)。

1. 添加对 slf4j-api 的依赖

2. 使用 slf4j API 在项目中进行统一日志记录

3. 绑定特定的日志实现框架

3.1 绑定已经实现 SLF4J 的日志框架,直接添加对应的依赖

3.2 如果没有实现 binding,先添加 log 适配器,再添加 implementation 类的依赖

4SLF4J 具有且只有一个日志实现框架的 binding(如果有多个,则默认使用依赖的 log 实现)。

原木桥接

以 log4j 编写的日志在原始项目中使用,但现在更新为 slf4j

只需导入


        
            org.slf4j
            log4j-over-slf4j
            1.7.25
        

这样代码就不需要任何更改

桥接和适应不能同时导入

Logback (日志返回)

具体用途要看代码(主要是配置logback.xml)。

日志返回:

主要分为 3 个阶段

logback-core:其他两个模块的基本模块

logback-classic:它是 log4j 的改进版本,并完全实现了 slf4j API

logback-access:访问模块和 servlet 容器提供了通过 HTTP 访问日志的能力

logback 逐个读取类型配置文件

logback.groovy

logback-test.xml

logback.xml 如果它们都不存在,则将使用默认配置

LOGBack 组件

1Logger:日志的 logger,关联到应用对应的上下文后,主要用于存储日志对象,也可以定义日志类型和级别

2Appender:指定日志输出的目的地,可以是控制台、文件、数据库等

2Layout:负责将事件转换为字符串和格式化日志信息。在 logback 中,Layout 对象封装在编码器中。

LOGBack - 访问模块

默认情况下,tomcat 有自己的访问日志,如果需要,可以将其集成到 logback 中以进行统一管理

对数 4j2

log4j2 用于代码示例

Springboot 中的日志记录实现了 Logger

版本升级 – (请注意版本号问题)。

主要讲如何处理每个项目日志的冲突

测试演示:

1. 以上所有项目都是依赖的 jar

2. 主要项目

Log4j 升级到 SLF4j

加

        
            org.slf4j
            slf4j-log4j12
            1.7.29
        

然后使用 slf4j 的 logger

LoggerFactory.getLogger(Log4jTest.class);

Log4J2 升级到 SLF4J

加


            org.apache.logging.log4j
            log4j-slf4j-impl
            2.9.1
        

实际项目情况

场景 1

我们的项目依赖于 A、B 和 C 三个依赖项,它们都分别实现它们

不使用 log4j、log4j2、logback 和 SLF4j log Facade 技术。

如果您未向主项目添加任何日志配置文件,则默认情况下,您将在自己的项目中找到该配置

如果主工程有相关配置,就会使用主工程的配置(log4j2 需要去掉 springboot 本身的 logging 依赖)。

场景 2

都使用 slf4j 来使用 log Facade,但下面 Bing 的具体 log 实现不一致

此时会提示警告,无论先加载哪个 implementation 都会使用全部 implementation。

这种情况下,我们一般需要使用统一的日志实现,否则打印的日志可能会不一致。

可以通过排他性排除引用项目中的依赖项

此时,只剩下两个,其他依赖被统一排除。通过这种方式,实现了团结

情况 3

有些使用 slf4j log 门面,有些使用 log4j(无 log 门面)。

此时不使用 SLF4j 的任何内容都将与主项目的其余日志不一致。格式单独打印。

例如,a 使用 log4j,而其他项目使用 slf4j log façade

此时,我们排除了对依赖 log4j 的锁

Add 在这种情况下,会强制关联 SLF4J 实现统一

        
            org.slf4j
            log4j-over-slf4j
            1.7.29
        

如果是 log4j2 (如果两者都有,则将排除两者并添加相应的依赖项)。

需要添加

        
            org.apache.logging.log4j
            log4j-to-slf4j
            2.12.1
        

你可能想看:
« 上一篇
下一篇 »

相关推荐

java中什么是冒泡,冒泡算法

2026年09月06日

27阅读

java中冒号,java双冒号

2026年09月06日

26阅读

java中的->,java中的是什么意思

2026年09月06日

24阅读

java中的super用法,Java中super的说明

2026年09月06日

28阅读

java中反射的应用,java中反射的应用场景

2026年09月06日

25阅读

java中开关的定义,Java关键字有哪些

2026年09月06日

25阅读