IDEA Maven项目中使用SLF4J并集成其他日志框架

740 阅读4分钟

1.SLF4J简单介绍

SLF4J( Simple Logging Facade For Java),即 简单日志门面,为Java 日志访问提供一套标准的 API 框架和接口,具体可以交由其他日志框架实现。

2.SLF4J与其他日志框架间关系

SLF4J.png

3.日志集成

  1. 日志框架的出现顺序为 : log4j → JUL → JCL → SLF4J → logback → log4j2
  2. simple 是 SLF4J 提供的简单实现框架,需要导入日志实现依赖,自动绑定到 SLF4J上。
  3. 如果没有绑定任何日志实现框架,则不能实现任何日志记录功能(默认执行nop)。
  4. logback 出现在 SLF4J 之后,其 API 遵循 SLF4J 进行设计,只需导入日志实现依赖,自动绑定到 SLF4J上。
  5. JUL、Log4j、reload4j 出现在 SLF4J 之前,其 API 不遵循 SLF4J 进行设计,需要通过适配桥接完成的与 SLF4J 的集成。

4.日志框架与其对应SLF4J适配(关键)

日志框架名称日志框架Jar包对应SLF4J中适配Jar包
slf4j-simpleslf4j-simple.jar无需适配(SLF4J原生实现)
nop无需导入无需适配
logbacklogback-classic.jar(无需导入logback-core.jar,前者已包含)无需适配(logback原生支持SLF4J)
JUL(java.util.logging)无需导入(jdk原生自带)slf4j-jdk14.jar
Log4jlog4j.jarslf4j-log4j12.jar
reload4j无需导入reload4j.jar(适配器已包含)slf4j-reload4j.jar
.........

5.SLF4J集成以上日志框架(案例测试)

(1)slf4j-simple

Maven 项目的 pom.xml 中导入所需依赖(修改后记得刷新重载)

<dependencies>

    <!-- 单元测试依赖 -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>

    <!-- slf4j核心依赖-->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>2.0.9</version>
    </dependency>

    <!-- slf4j-simple,SLF4J自带的日志框架,无需适配器-->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>2.0.9</version>
    </dependency>

</dependencies>

测试类代码

import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class test {
        @Test
        public void test1(){
            // 实现自带的简单日志实现框架(slf4j-simple)
            Logger logger = LoggerFactory.getLogger(test.class);
            logger.trace("trace 追踪信息");
            logger.debug("debug 详细信息");
            logger.info("info 关键信息");
            logger.warn("warn 警告信息");
            logger.error("error 错误信息");
        }
}

测试结果

image.png

(2)nop

Maven 项目的 pom.xml 中导入所需依赖(修改后记得刷新重载)

<dependencies>

    <!-- 单元测试依赖 -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>

    <!-- slf4j核心依赖-->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>2.0.9</version>
    </dependency>

</dependencies>

测试类代码

import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class test {
        @Test
        public void test1(){
            // 没有实现其它日志框架,也没有使用自带的简单日志实现框架(slf4j-simple)
            Logger logger = LoggerFactory.getLogger(test.class);
            logger.trace("trace 追踪信息");
            logger.debug("debug 详细信息");
            logger.info("info 关键信息");
            logger.warn("warn 警告信息");
            logger.error("error 错误信息");
        }
}

测试结果

image.png

(3)logback

Maven 项目的 pom.xml 中导入所需依赖(修改后记得刷新重载)

<dependencies>

    <!-- 单元测试依赖 -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>

    <!-- slf4j核心依赖-->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>2.0.9</version>
    </dependency>

    <!-- logback-classic日志框架实现,无需适配器-->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.3.6</version>
    </dependency>

</dependencies>

测试类代码

import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class test {
        @Test
        public void test1(){
            // 实现logback-classic日志框架
            Logger logger = LoggerFactory.getLogger(test.class);
            logger.trace("trace 追踪信息");
            logger.debug("debug 详细信息");
            logger.info("info 关键信息");
            logger.warn("warn 警告信息");
            logger.error("error 错误信息");
        }
}

测试结果

image.png

(4)JUL(java.util.logging)

Maven 项目的 pom.xml 中导入所需依赖(修改后记得刷新重载)

<dependencies>

    <!-- 单元测试依赖 -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>

    <!-- slf4j核心依赖-->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>2.0.9</version>
    </dependency>

    <!-- jul适配器,无需导入日志框架,jdk自带-->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-jdk14</artifactId>
        <version>2.0.9</version>
    </dependency>
    
</dependencies>

测试类代码

import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class test {
        @Test
        public void test1(){
            // 实现JUL(java.util.logging)日志框架
            Logger logger = LoggerFactory.getLogger(test.class);
            logger.trace("trace 追踪信息");
            logger.debug("debug 详细信息");
            logger.info("info 关键信息");
            logger.warn("warn 警告信息");
            logger.error("error 错误信息");
        }
}

测试结果

image.png

(5)Log4j

Maven 项目的 pom.xml 中导入所需依赖(修改后记得刷新重载)

<dependencies>

    <!-- 单元测试依赖 -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>

    <!-- slf4j核心依赖-->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>2.0.9</version>
    </dependency>

    <!-- log4j 日志框架,需要添加log4j.properties配置文件才能输出-->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>

    <!-- log4j适配器-->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>2.0.9</version>
    </dependency>
    
<dependencies>

在 resources 中新建 log4j.properties 文件

#配置日志级别,输出器
log4j.rootLogger=INFO,console
#配置控制台输出器
log4j.appender.console=org.apache.log4j.ConsoleAppender
#配置自定义格式器
log4j.appender.console.layout=org.apache.log4j.PatternLayout
#配置自定义转换模式
log4j.appender.console.layout.conversionPattern=[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5p] %m%n

测试类代码

import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class test {
        @Test
        public void test1(){
            // 实现Log4j日志框架
            Logger logger = LoggerFactory.getLogger(test.class);
            logger.trace("trace 追踪信息");
            logger.debug("debug 详细信息");
            logger.info("info 关键信息");
            logger.warn("warn 警告信息");
            logger.error("error 错误信息");
        }
}

测试结果

image.png

(6)reload4j

Maven项目的pom.xml中导入所需依赖(每次修改后记得刷新重载)

<dependencies>

    <!-- 单元测试依赖 -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>

    <!-- slf4j核心依赖-->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>2.0.9</version>
    </dependency>
    
    <!-- reload4j适配器,会自动导入reload4j.jar包,需要添加log4j.properties配置文件才能输出-->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-reload4j</artifactId>
        <version>2.0.9</version>
    </dependency>
  
</dependencies>

测试类代码

import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class test {
        @Test
        public void test1(){
            // 实现reload4j日志框架
            Logger logger = LoggerFactory.getLogger(test.class);
            logger.trace("trace 追踪信息");
            logger.debug("debug 详细信息");
            logger.info("info 关键信息");
            logger.warn("warn 警告信息");
            logger.error("error 错误信息");
        }
}

测试结果

image.png