LogBack開發環境配置
Logback是一個開源的日誌記錄庫,它是log4j的一個改進版本 。Logback被設計為易於使用,同時提供強大的日誌管理功能。
1.新增依賴
在pom.xml檔案中新增依賴:
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.1</version>
</dependency>
2.建立Logback配置檔案
在你的資源目錄(通常是src/main/resources)中建立一個名為logback.xml的檔案。這個檔案將包含你的日誌配置。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="STDOUT" />
</root>
</configuration>
3.使用logback記錄日誌
在你的Java程式碼中,你可以透過匯入logback的Logger類來記錄日誌。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@SpringBootTest
public class LogbackTest {
private static final Logger log = LoggerFactory.getLogger(LogbackTest.class);
/**
* 測試log4J的使用
* @author lyj
* @date 2024-10-28
*/
@Test
public void test(){
log.error("hello, Logback!");
}
}
4.執行你的應用程式
logback高階特性
1. 配置多個Appender
你可以配置多個Appender,以便將日誌輸出到不同的目的地,比如控制檯、檔案、遠端伺服器等。 這裡配置的檔案路徑為,當前專案的logs資料夾下。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 日誌存放路徑 -->
<property name="log_path" value="./logs" />
<!-- 輸出到控制檯-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!--輸出到檔案-->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log_path}/logFile.log</file>
<encoder>
<pattern>${log_path}/%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log_path}/logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
</appender>
<root level="info">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>
開啟logs日誌。可以看到輸出已經寫logFile.log
檔案下:
2. 日誌級別的控制
Logback支援TRACE, DEBUG, INFO, WARN, ERROR和FATAL等日誌級別。你可以在配置檔案中為不同的Logger設定不同的日誌級別,以便控制日誌的詳細程度。
<root level="info">
<appender-ref ref="STDOUT" />
</root>
<root level="DEBUG">
<appender-ref ref="FILE"></appender-ref>
</root>
3. 非同步日誌記錄
對於需要高效能日誌記錄的應用程式,Logback提供了非同步Appender。使用非同步Appender可以減少日誌記錄對應用程式效能的影響。
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<queueSize>512</queueSize>
<discardingThreshold>0</discardingThreshold>
<appender-ref ref="STDOUT" />
</appender>
<root level="info">
<appender-ref ref="file_info" />
<appender-ref ref="file_error" />
</root>
在這個例子中,所有的日誌都會先被髮送到非同步Appender的佇列中,然後由一個單獨的執行緒從佇列中取出並處理(即傳送到控制檯)。
4. 日誌格式的自定義
Logback允許你自定義日誌訊息的格式,以滿足特定的格式化需求。你可以透過修改encoder部分的pattern屬性來實現這一點。例如,如果你希望在日誌中包含執行緒名稱和類名,你可以這樣配置:
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
5. 日誌檔案的壓縮和清理
隨著時間的推移,日誌檔案會不斷增長,可能會佔用大量的磁碟空間。Logback的TimeBasedRollingPolicy已經提供了一種按日期分割日誌檔案的機制,但你還可以進一步配置日誌檔案的壓縮和清理策略。
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory> <!-- 保留最近30天的日誌檔案 -->
<totalSizeCap>3GB</totalSizeCap> <!-- 最多保留3GB的日誌資料 -->
</rollingPolicy>
在這個配置中,maxHistory
屬性指定了保留日誌檔案的最大天數,而totalSizeCap
屬性則限制了日誌檔案的總大小。一旦達到這些限制,舊的日誌檔案將被自動刪除或壓縮,從而幫助你管理磁碟空間。
6. 日誌的歸檔
有時候,你可能希望將日誌檔案歸檔到一個單獨的目錄中,以便於備份和管理。你可以透過配置rollingPolicy
來實現這一點:
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/var/log/myapp/archive/logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
在這個例子中,日誌檔案將被歸檔到/var/log/myapp/archive/
目錄下。你可以根據實際需要調整歸檔路徑。
透過這些高階配置,你可以進一步最佳化Logback的使用,以滿足複雜和特定的日誌記錄需求。靈活地運用這些技巧,可以幫助你更好地管理和分析應用程式的日誌資料。