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>