一、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-tw/n/270598.html