日志系统jar包:slf4j-api, slf4j-log4j12以及log4j

本文介绍了日志门面的概念,如slf4j和common-logging,并详细解释了如何结合使用slf4j与不同的日志组件,如log4j、logback及java.util.logging等。此外还对比了Log4j2相较于Log4j1.x和Logback的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在接入日志系统的时候,通常会引入slf4j-api, slf4j-log4j12以及log4j等包,但是看他们长得都差不多,彼此之间有什么联系呢?为什么要引入这些包?不能直接接入log4j就行了吗?

首先,要知道什么是日志门面?日志门面其实就是关于日志的api,常见的有common-logging和slf4j。common-logging 是 apache 的一个开源项目,提供日志功能的 API 接口,本身并不提供日志的具体实现,而是在运行时动态的绑定日志实现组件来工作。类似于 Common-Logging,slf4j 是对不同日志框架提供的一个 API 封装,可以在部署的时候不修改任何配置即可接入一种日志实现方案。但是,slf4j 在编译时静态绑定真正的 Log 库。

其次,有了API后,需要有具体的实现,绑定日志组件。对应的绑定关系有:

 

对应的组合配置有:

1、slf4j + logback

<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>1.0.14</version>
</dependency>

logback-classic-1.0.14.jar 会自动将 slf4j-api-1.7.21.jar 和 logback-core-1.0.14.jar 也引入到项目中。

2、slf4j + log4j

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
  <version>1.7.21</version>
</dependency>

slf4j-log4j12-1.7.21.jar 会自动将 slf4j-api-1.7.21.jar 和 log4j-1.2.17.jar 也添加到你的项目中

3、slf4j + java.util.logging

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-jdk14</artifactId>
  <version>1.7.21</version>
</dependency>

4、slf4j兼容非slf4j日志组件

如果项目中已经使用了common-logging,但是想用slf4j的日志组件,可以通过桥接模式,用jcl-over-slf4j.jar 把日志信息输出重定向到 slf4j-api,slf4j-api 再去调用 slf4j 实际依赖的日志组件

slf4j 兼容 common-logging

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>jcl-over-slf4j</artifactId>
  <version>1.7.12</version>
</dependency>
复制代码

slf4j 兼容 log4j

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>log4j-over-slf4j</artifactId>
    <version>1.7.12</version>
</dependency>
复制代码

slf4j 兼容 java.util.logging

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jul-to-slf4j</artifactId>
    <version>1.7.12</version>
</dependency>

5、log4j2

Log4j2 是 Log4j 和 Logback 的替代,其优势有:

  • Log4j 1.x 和 Logback 都会在重新配置时丢失事件, Log4j 2 不会。在 Logback 中,Appender 中的异常永远不会对应用程序可见。在 Log4j 中,可以将 Appender 配置为允许异常渗透到应用程序。
  • Log4j2 在多线程场景中,异步 Loggers 的吞吐量比 Log4j 1.x 和 Logback 高 10 倍,延迟低几个数量级。
  • Log4j2 对于独立应用程序是无垃圾的,对于稳定状态日志记录期间的 Web 应用程序来说是低垃圾。
  • Log4j2 使用插件系统,通过添加新的 Appender、Filter、Layout、Lookup 和 Pattern Converter,可以非常轻松地扩展框架,而无需对 Log4j 进行任何更改。
  • 支持自定义日志等级
  • 支持 lambda 表达式
  • 支持消息对象
  • Log4j 和 Logback 的 Layout 返回的是字符串,而 Log4j2 返回的是二进制数组,这使得它能被各种 Appender 使用。
  • Syslog Appender 支持 TCP 和 UDP 并且支持 BSD 系统日志。
  • Log4j2 利用 Java5 并发特性,尽量小粒度的使用锁,减少锁的开销。

在spring-boot项目中使用log4j2
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
    <version>2.0.6.RELEASE</version>
</dependency>
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值