【翻譯】spring-boot日誌相關梳理(二)之slf4j入門

spring-boot日誌相關梳理(-)裏提到slf4j系列,因爲後續的很多日誌框架都依賴於它,重點看看slf4j.

slf4j官方文檔:http://www.slf4j.org/docs.html

用戶手冊:http://www.slf4j.org/manual.html

HelloWorld

1.建議maven項目 slf4j,pom中添加依賴

<properties>
        <slf4j.version>1.7.28</slf4j.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
    </dependencies>

2.創建如下類

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

public class HelloWorld {
    public static void main(String[] args) {
        Logger logger = LoggerFactory.getLogger(HelloWorld.class);
        logger.info("Hello World");
    }
}

a> 沒有引入任何實現依賴-->丟棄日誌

直接運行HelloWorld,輸出如下:

原因:LoggerFactory.bind()

b> slf4j-simple 依賴

 修改pom文件

  <properties>
        <slf4j.version>1.7.28</slf4j.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
    </dependencies>

運行HelloWorld

自定義配置:

配置文件位置:src/main/resources/simplelogger.properties

文件內容

org.slf4j.simpleLogger.logFile=simple.log
org.slf4j.simpleLogger.defaultLogLevel=info

重新運行HelloWorld, 發現輸出到根目錄下simple.log文件中

配置解析可以參考:SimpleLoggerConfiguration; 優先參考SystemProperties, 其次simplelogger.properties

經典語法

使用佔位符方式傳遞參數, 詳細細節:http://www.slf4j.org/faq.html#logging_performance

        logger.debug("Temperature set to {}. Old temperature was {}.", t, oldT);

流式使用api(Fluent Logging API)

ps:SLF4J API version 2.0.0 以後纔可以:https://repo1.maven.org/maven2/org/slf4j/

修改pom文件

<properties>
        <slf4j.version>2.0.0-alpha1</slf4j.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
    </dependencies>

修改Java代碼:

public class HelloWorld {
    public static void main(String[] args) {
        Logger logger = LoggerFactory.getLogger(HelloWorld.class);
        logger.atInfo().log("Hello World,{}", print("fluent info"));
        logger.atDebug().log("Hello World,{}", print("fluent debug "));
        logger.atDebug().addArgument(() -> print("fluent debug argument")).log("Hello World,{}");
        logger.info("Hello World,{}", print("info"));
        logger.debug("Hello World,{}", print("debug"));
    }

    private static String print(String message) {
        System.out.println(message);
        return message;
    }
}

運行HelloWorld,輸出:

隨着參數的增多,fluent 的優越性就體現出來了

和其他的日誌框架綁定

1. log4j version 1.2

pom文件

    <properties>
        <slf4j.version>1.7.28</slf4j.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>

        <!--綁定log4j version1.2-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
   </dependencies>

2.java.util.logging,也叫jdk1.4logging

修改pom文件

    <properties>
        <slf4j.version>1.7.28</slf4j.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-jdk14</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
   </dependencies>

3.綁定 NOP, 默認丟棄所有日誌

    <properties>
        <slf4j.version>1.7.28</slf4j.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-nop</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
   </dependencies>

4.Binding for Jakarta Commons Logging,把所有slf4j日誌代理給JCL

    <properties>
        <slf4j.version>1.7.28</slf4j.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-jcl</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
   </dependencies>

5.綁定logback : 因爲slf4j和logback的作者屬於同一人,原生兩者就是相互支持的,不用再做轉換

    <properties>
        <slf4j.version>1.7.28</slf4j.version>
        <logback.version>1.7.28</logback.version>

    </properties>

    <dependencies>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>

        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>${logback.version}</version>
        </dependency>
   </dependencies>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章