SLF4j + Log4j 、Log4j2、 Logback 日志框架使用【生产场景分析】

本文详细介绍了SLF4j作为日志门面的作用,以及如何在生产环境中应对不同日志实现(Log4j、Log4j2、Logback)的场景。通过使用适配器如slf4j-log4j12和log4j-slf4j-impl,实现了日志框架的统一,同时讨论了不同依赖库日志实现混杂时的处理策略,提供了解决方案。

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

写在前面

从写代码开始,就陆陆续续接触到了许多日志框架,常用的Log4j 、Log4j2、 Logback等。每次自己写项目时,就copy别人的代码或网上的demo。配置log4j.properties或者logback.xml 就能搞定。但是一直没有理清各个框架之前的关系。然后总感觉打印日志的时候并不是随心所欲。特此简单分析分析。

在这里插入图片描述
SLF4j是日志门面,是一个日志标准,并非真正的日志实现,log4j、log4j2、logback才是真正的日志实现库。也就是说log4j、log4j2、logback 这兄弟三才是 真正打印日志的。

日志门面就是为了统一各个依赖的不同日志实现,便于我们自己项目中对类进行统一维护处理。

再来看看阿里java开发规范:

在这里插入图片描述

如题,这里选用常用的SLF4j + Log4j 、Log4j2、 Logback 进行分析。

在这里插入图片描述

在这里插入图片描述

slf4j是门面,大的设计模式是门面系统,而logback是直接实现了slf4j-api中的接口(已经默认实现了SLF4j的日志标准),是通过接口实现的方式完成了门面的实现。

而log4j和log4j2没有直接实现接口,所以需要个适配器。slf4j-log4j12和log4j-slf4j-impl就是适配器,将原本不能实现slf4j的变得也能实现这个标准了。添加了适配器后,就能使用slf4j的接口来使用log4j了。

各个库单独使用

  1. log4j
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

classpath下配置文件log4j.properties

log4j.rootLogger=INFO,console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{
   yyyy-MM-dd HH:mm:ss} [%p] %c: %m%n

使用:

import org.apache.log4j.Logger;
...
static final Logger LOGGER = Logger.getLogger(Main.class);
  1. log4j2
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.12.1</version>
</dependency>

classpath下log4j2.properties

rootLogger.level = info
rootLogger.appenderRef.stdout.ref = STDOUT

appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{
   yyyy-MM-dd HH:mm:ss} [%p] %c: %m%n

使用:

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
...
static final Logger LOGGER = LogManager.getLogger(Main
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值