当前位置: 首页 > 工具软件 > J4ME > 使用案例 >

slf4j与log4j

陆承宣
2023-12-01

slf4j与log4j

slf4j是通用的接口规范,log4j是具体实现的日志插件,slf4j也可以搭配其他实现的jar包一起使用。

本文参考3W学习方法来叙述内容。

一、What

1、slf4j和log4j的区别是什么?

log4j:log for java,Apache的一个开源项目,可以通过一个配置文件灵活配置日志的输送目的地、记录级别、输出格式。

slf4j:simple log facade for java,译为简单日志门面。官方介绍为,SLF4J作为各种日志系统的简单Facade或抽象,允许最终用户在部署时插入所需的日志框架。

总结:slf4j是通用的接口规范,log4j是具体实现的日志插件。

PS:代码中命名常用【4 代表 for】、【2 代表 to】

二、Why

1、log4j为什么搭配slf4j一起使用?

在知晓了slf4j是一套接口、log4j是一套具体实现后,就需要理解编程中“接口”的意义(统一规范、解耦、提高编程灵活性和可维护性)。
同理,在实现不同项目开发中“日志记录”的过程中,引入一套通用的日志接口规范后,既能兼容不同项目中使用的不同日志实现插件,又能在后期维护中随时更换其他的日志实现插件。

2、为什么推荐使用slf4j作为日志接口规范?

日志实现插件可以根据需要更换Logback或其他。日志接口规范还有Commons Logging,而slf4j的出现主要因为对前者的不满意,所以slf4j是对Commons Logging的改进。这里改进主要看一点:支持带占位符的字符串。
例如:

    String me = "zhangsan";
    String you = "lisi";
    // Commons Logging 打印日志
    log.info("Hello, " + you + ". I'm " + me + ".");
    // slf4j 打印日志
    log.info("Hello, {}. I'm {}.", you, me);  

三、How

1、log4j怎样搭配slf4j使用?

1.1 引入依赖

maven坐标为:

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

1.2 创建一个静态常量的日志对象

在需要打印日志的Java Bean 中,定义属性成员:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
...
...
private static final Logger logger = LoggerFactory.getLogger(getClass());
...
...
logger.info("Hello, world.")

PS: 日志对象在类的实例中一般不需要修改和多份对象,所以常用static和final修饰。

2、常用的日志框架该如何组合选择?

常用组合方式为:
1. Slf4j + Logback
2. Slf4j + Log4j
3. Commons Logging + Log4j

PS: Logback更适合搭配Slf4j,不建议搭配Commons Logging, 因为Logback与Slf4j为同一作者,兼容性更好。

 类似资料: