Java 日志抽象库 SLF4J 入门

日志是项目运维中必不可少的工具。不管是项目优化、排除BUG等,日志具有举足轻重的地位。

SLF4J , 它不是一个真正的日志实现, 而是一个抽象层 (abstraction layer) 。 SLF4J 是日志接口层。接口具有通用性,既可以使用 log4j 作为其实现层,也可以使用 logback 。

因此,在在加载 jar 包时,除了加载 SLF4J 类库外, 还需要一个日志的实现。 这里使用 log4j 作为日志实现。

Maven 依赖配置

<dependencies>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.25</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>2.8.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.8.2</version>
    </dependency>
</dependencies>
  • slf4j-api 是日志抽象层类库;
  • log4j-core 是具体的日志实现;
  • log4j-slf4j-ipml 则是前两者的连接。

log4j2.xml 配置文件

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

打印日志代码

package com.sggdv.example.slf4j;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Example {

    private static final Logger logger = LoggerFactory.getLogger(Example.class);

    public static void main(String[] args) {
        logger.info("Hello world!");

        // 可以使用 {} 作为占位符,从第二个参数起,依次替换。
        logger.info("{} {}", "Hello", "world");
    }

}

重点

解理 SLF4J 与 log4j 、logback 的关系。

SLF4J 是日志接口层,log4j 与 logback 是日志实现层。

源码托管

完整代码,查看 Github