1. 程式人生 > 其它 >Log4j2日誌框架整合Slf4j日誌門面

Log4j2日誌框架整合Slf4j日誌門面

技術標籤:javaslf4jlog4jlog4j2logging

1.說明

本文介紹使用日誌門面Slf4j列印日誌,
底層日誌實現使用Log4j2框架,
方便以後切換底層日誌實現,
Log4j2可以替換成Logback等。

2.依賴管理

在pom.xml依賴管理中匯入slf4j-api和log4j-bom:

<dependencyManagement>
    <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-bom</artifactId>
            <version>2.12.1</version>
            <scope>import</scope>
            <type>pom</type>
        </dependency>
    </dependencies>
</dependencyManagement>

3.依賴引入

在pom.xml依賴中引入相關的jar包:

<dependencies>
    <!-- slf4j+log4j2 日誌框架 start -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
    </dependency>
    <!-- slf4j+log4j2 日誌框架 end -->
</dependencies>

4.日誌配置

在src/main/resource下面增加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 [%l] - %msg%n"/>
    </Console>
  </Appenders>
  <Loggers>
    <Root level="DEBUG">
      <AppenderRef ref="Console"/>
    </Root>
  </Loggers>
</Configuration>

說明一下,
雖然使用了日誌門面,
但是配置檔案還是和底層日誌實現相關的,
這裡Log4j2使用log4j2.xml配置檔案,
包括檔案內容的格式,
都要符合Log4j2規範,
更多說明請參考Log4j2完整XML參考(詳細註釋說明)

5.記錄日誌

在記錄日誌的時候,
使用Slf4j提供的日誌工廠和日誌類即可。

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

public class UserController {
    private Logger logger = LoggerFactory.getLogger(getClass());

    public List<User> getUsersAll() {
        logger.debug("UserController.getUsersAll() start");
    }
}

其中通過日誌工廠獲取日誌類的時候,
還有以下寫法,
注意在不同的類中使用時記得修改名稱:

private Logger logger = LoggerFactory.getLogger(UserController.class);

6.輸出日誌

可以看到如下日誌:

2020-07-02 15:57:11.723 [http-nio-8088-exec-1] DEBUG [24] - UserController.getUsersAll() start

7.參考文章

SpringBoot整合Log4j2框架