一、Logback簡介
Logback是一個功能強大的日誌框架,可以替代log4j和java.utils.logging。其特點是速度最快,具有豐富的API和靈活的配置選項。Logback除了與Java編程語言集成緊密之外,還可以集成於Spring框架之上。Logback的核心組件是模塊化的,可以使用適當的模塊進行完全自定義的配置。此外,Logback還有許多有用的附加功能,例如日誌文件壓縮、數據庫日誌記錄、靈活的上下文檔案並支持異步路由和過濾器鏈等功能。
二、Logback的架構
Logback的架構包含三種主要的組件:Logger、Appender和Layout。Logger組件負責生成日誌記錄,Appender組件負責將日誌記錄輸出到適當類型的目的地,Layout組件負責格式化日誌事件的表示。
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="false">
<!--定義信息輸出到控制台上的參數-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- logback 默認採用 Filter 來實現日誌過濾 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>TRACE</level>
</filter>
<encoder>
<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %logger{36} - %msg [%file:%line]%n</pattern>
</encoder>
</appender>
<!--定義信息輸出到文件上的參數-->
<appender name="fileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 定義過濾器,只輸出INFO級別以上的日誌到文件中-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<file>logs/debug.log</file> <!-- 日誌輸出路徑-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/debug.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
<maxHistory>30</maxHistory> <!--log文件保留最多30個備份-->
<totalSizeCap>5GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%-d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} [%file:%line] - %msg%n</pattern>
</encoder>
</appender>
<!--定義日誌記錄器-->
<logger name="com.cloudfire" level="info">
<appender-ref ref="console" />
<appender-ref ref="fileAppender" />
</logger>
<root level="info">
<appender-ref ref="console" />
<appender-ref ref="fileAppender" />
</root>
</configuration>
三、Logback-Spring.xml配置示例
下面是一個Logback-Spring.xml配置文件示例,在這個示例中,使用了控制台和文件兩個Appender,在級別為INFO的情況下,將日誌記錄到文件中。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml PUBLIC "-//SPRING//DTD LOGGING//EN"
"http://www.springframework.org/dtd/spring-logging.dtd">
<configuration debug="true">
<!--定義info日誌輸出到文件.-->
<appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/data/logs/cm_db/cm_db-info.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/data/logs/cm_db/cm_db-info_%d{yyyyMMdd}.log.zip</fileNamePattern>
<maxHistory>7</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>50MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!--定義debug日誌輸出到文件.-->
<appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/data/logs/cm_db/cm_db-debug.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/data/logs/cm_db/cm_db-debug_%d{yyyyMMdd}.log.zip</fileNamePattern>
<maxHistory>7</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>50MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!--定義error日誌輸出到文件.-->
<appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/data/logs/cm_db/cm_db-error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/data/logs/cm_db/cm_db-error_%d{yyyyMMdd}.log.zip</fileNamePattern>
<maxHistory>7</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>50MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!--定義輸出格式.-->
<!--trace<debug<info<warn<error<fatal-->
<root level="INFO">
<appender-ref ref="console" />
<appender-ref ref="infoAppender" />
<appender-ref ref="debugAppender" />
<appender-ref ref="errorAppender" />
</root>
</configuration>
四、如何集成Logback到Spring Boot應用
在Spring Boot應用中,需要在pom.xml中加入以下依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
之後,創建logback-spring.xml文件並放置在class path或者根目錄下即可。
五、Logback與Spring框架的深度集成
在使用Spring框架時,如果想要使用Logback作為日誌框架,那麼你可以使用Spring Boot框架,它會自動配置Logback,使得Spring應用輕鬆地使用Logback。Spring Boot支持以下幾種日誌框架:log4j,Log4j2,JUL(java.utils.logging,Java’s built-in logging framework)和Logback。Spring Boot提供了一種簡單的方法來切換這些框架:替換後就可以使用一個不同的jar文件了。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
六、總結
Logback-Spring.xml配置文件是配置Logback日誌框架的關鍵文件之一,通過Logback日誌框架,可以提供強大的日誌記錄和管理功能,從而優化應用程序的性能。在Spring Boot框架中,使用Logback日誌框架創建和管理Spring應用程序的日誌,可以無縫集成Logback日誌框架並提供自動配置功能,使得開發人員可以輕鬆地使用Logback日誌框架。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/270598.html
微信掃一掃
支付寶掃一掃