市面上雖然有很多日誌處理機制,但是SLF4j+Logback其功能強大、使用簡便的優勢,受到越來越多的開發者青睞。
而且SpringBoot底層默認使用的是SLF4j+Logback日誌
,它會自動依賴這兩個包,不需要我們配置。
我們在此也介紹這種組合方式開發。
1、pom文件中導入對應的依賴包
tips:如果創建的是web項目,需要導入;如果創建的直接是springbootweb項目,就不需要導入了。
<!-- slf4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.26</version>
</dependency>
<!-- logback -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
如果是SpringBootweb項目的話不用導入上述依賴,SpringBoot的底層已經依賴好了,見下圖:
2、logback.xml文件配置
logback.xml: 直接被日誌框架識別。
<?xml version="1.0" encoding="UTF-8"?>
<!-- logback配置
1. 生產環境禁止輸出日誌到控制檯
註釋 <appender-ref ref="STDOUT" /> 即可
2. 配置包日誌
配置logger標籤即可,name字段爲包全路徑,lever可控制日誌等級
3. 生產環境下不停機更新日誌配置
scanPeriod:設置監測配置文件是否有修改的時間間隔,如果沒有給出時間單位,默認單位是毫秒。當scan爲true時,此屬性生效
-->
<configuration scan="true" scanPeriod="60000">
<!-- Basic log dir, name config -->
<!-- 此處的這個路徑配置自己創建的-->
<property name="baseDir" value="D:/logs/JavaDemo"/>
<property name="demoClassDir" value="demoClass"/>
<!-- DemoClass log -->
<appender name="DEMO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${baseDir}/${demoClassDir}.log</file>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<charset>UTF-8</charset>
<Pattern>%d{yyyy-MM-dd HH:mm:ss z} [%thread] %-5level %logger{5} %M:%L - %msg%n</Pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${baseDir}/${demoClassDir}/%d{yyyy-MM-dd}.log</FileNamePattern>
<!--只保留最近90天的日誌-->
<!-- <maxHistory>90</maxHistory>-->
<!--用來指定日誌文件的上限大小,那麼到了這個值,就會刪除舊的日誌-->
<!-- <totalSizeCap>1GB</totalSizeCap>-->
</rollingPolicy>
</appender>
<!-- 控制檯輸出 不需要修改 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<charset>UTF-8</charset>
<Pattern>%d{yyyy-MM-dd HH:mm:ss z} [%thread] %-5level %logger{5} %M:%L - %msg%n</Pattern>
</encoder>
</appender>
<logger name="com.spz.demo.java" level="INFO" additivity="true">
<appender-ref ref="DEMO" />
</logger>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>
3、官方用例
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");
}
}
4、日誌的使用
1、默認配置
SpringBoot默認幫我們配置好了日誌:
//記錄器
Logger logger = LoggerFactory.getLogger(getClass());
@Test
void contextLoads() {
//日誌的級別: 由低到高 trace<debug<info<warn<error
//可以調整輸出的日誌級別:日誌只會在這個級別及以後的高級別生效
logger.trace("這是tract日誌.....");
logger.debug("這是debugger日誌.....");
//springboot默認給我們的使用是info級別,沒有指定級別的就用springboot默認級別
logger.info("這是info日誌.....");
logger.warn("這是warn日誌....");
logger.error("這是error日誌....");
}
日誌輸出格式:
logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%
%d 表示日期時間
%thread 表示線程名
%-5level 表示從左顯示5個字符寬度
%logger{50} 表示logger名字最長50個字符,否則按照句點分割
%msg 表示日誌消息
%n 表示換行符
實例: 可以自己設置一些輸出格式!
logging.level.com.dongxk = trace
#當前項目下生成springboot.Log日誌
#logging.file.name = xxxx
# /表示當前磁盤的根路徑
# /spring/log表示在當前磁盤根路徑下創建spring文件夾和裏面的log文件夾,使用spring.log作爲默認文件
logging.file.path= /spring/log
# 在控制檯輸出的日誌格式
logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n
# 指定文件中的日誌輸出格式
logging.pattern.file=%d{yyyy-MM-dd} === [%thread] %-5level %logger{50} - %msg%n