Spring Boot集成Logback終極指南之從基礎到高級配置實戰(zhàn)指南
一、Logback簡介與Spring Boot集成基礎
1.1 Logback是什么?
Logback是一個可靠、通用且快速的Java日志框架,作為Log4j的繼承者,由Log4j創(chuàng)始人設計。它由三個模塊組成:
- logback-core:基礎模塊
- logback-classic:實現(xiàn)了SLF4J API
- logback-access:與Servlet容器集成提供HTTP訪問日志功能
為什么選擇Logback?
- 性能比Log4j更高
- 豐富的文檔
- 自動重新加載配置文件
- 自動壓縮日志文件
- 更靈活的過濾功能
- 更豐富的日志格式
1.2 Spring Boot默認日志框架
Spring Boot默認使用Logback作為日志框架,當你使用spring-boot-starter或spring-boot-starter-web時,已經(jīng)自動引入了Logback依賴。
<!-- 在Spring Boot項目中,你不需要顯式添加Logback依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>1.3 基本日志使用示例
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@RestController
public class DemoController {
// 獲取Logger實例,通常以當前類作為參數(shù)
private static final Logger logger = LoggerFactory.getLogger(DemoController.class);
@GetMapping("/demo")
public String demo() {
logger.trace("This is a TRACE level message");
logger.debug("This is a DEBUG level message");
logger.info("This is an INFO level message");
logger.warn("This is a WARN level message");
logger.error("This is an ERROR level message");
return "Check your console or log file!";
}
}二、Logback配置文件詳解
2.1 配置文件加載順序
Spring Boot會按以下順序查找Logback配置文件:
logback-spring.xml(推薦使用)logback.xml- 如果以上都不存在,使用默認配置
為什么推薦使用logback-spring.xml?
- 可以使用Spring Boot特有的
<springProperty>標簽 - 支持Spring Profile特定的配置
2.2 配置文件基本結(jié)構(gòu)
一個完整的Logback配置文件通常包含以下部分:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 屬性定義 -->
<property name="LOG_HOME" value="./logs" />
<!-- 定義appender -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoder定義日志輸出格式 -->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- 定義logger -->
<logger name="com.example.demo" level="DEBUG" />
<!-- 根logger配置 -->
<root level="INFO">
<appender-ref ref="CONSOLE" />
</root>
</configuration>三、核心組件深度解析
3.1 <configuration> 元素
<configuration>是Logback配置文件的根元素,支持以下重要屬性:
| 屬性名 | 類型 | 默認值 | 描述 |
|---|---|---|---|
| scan | boolean | false | 是否監(jiān)視配置文件變化 |
| scanPeriod | 時間間隔 | 1分鐘 | 檢查配置文件變化的時間間隔 |
| debug | boolean | false | 是否打印Logback內(nèi)部調(diào)試信息 |
| packagingData | boolean | false | 是否包含調(diào)用者信息(影響性能) |
示例:
<configuration scan="true" scanPeriod="30 seconds" debug="false">
<!-- 配置內(nèi)容 -->
</configuration>最佳實踐:
- 開發(fā)環(huán)境可以開啟
scan以便動態(tài)調(diào)整配置 - 生產(chǎn)環(huán)境應關閉
scan和debug以避免性能開銷 - 僅在需要診斷問題時開啟
packagingData
3.2 <property> 元素
用于定義變量,可在配置文件中重復使用:
屬性:
name: 變量名(必填)value: 變量值file: 從外部文件加載屬性resource: 從classpath資源加載屬性scope: 作用域(“local"或"context”)
示例:
<!-- 直接定義 -->
<property name="LOG_HOME" value="/var/logs/myapp" />
<!-- 從系統(tǒng)環(huán)境變量獲取 -->
<property name="LOG_HOME" value="${LOG_DIR:-./logs}" />
<!-- 從外部文件加載 -->
<property file="conf/logback.properties" />
<!-- 在Spring Boot中使用 -->
<springProperty scope="context" name="appName" source="spring.application.name" />變量引用方式: ${變量名}
作用域說明:
local: 僅在當前配置文件中有效context: 在整個LoggerContext中有效
3.3 <timestamp> 元素
用于定義時間戳變量:
屬性:
key: 變量名datePattern: 日期格式(遵循Java SimpleDateFormat)timeReference: 時間參考點("contextBirth"或當前時間)
示例:
<timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss" />
<property name="LOG_FILE" value="${LOG_HOME}/log-${bySecond}.log" />3.4 <appender> 元素
Appender負責定義日志輸出目的地,是Logback最核心的組件之一。
3.4.1 Appender通用結(jié)構(gòu)
<appender name="UNIQUE_NAME" class="APPENDER_CLASS">
<!-- 過濾器配置 -->
<filter class="ch.qos.logback.core.filter.FilterClass" />
<!-- 布局/編碼器配置 -->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} %msg%n</pattern>
</encoder>
<!-- 其他特有配置 -->
</appender>3.4.2 ConsoleAppender
輸出日志到控制臺(System.out或System.err)
特有屬性:
target: 輸出目標(“System.out"或"System.err”),默認為System.outwithJansi: 是否啟用ANSI顏色支持(需jansi庫)
示例:
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<target>System.out</target>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>3.4.3 FileAppender
輸出日志到單個文件
特有屬性:
file: 日志文件路徑append: 是否追加到文件末尾(默認為true)prudent: 是否安全模式(多進程寫入同一文件時使用)
示例:
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${LOG_HOME}/myapp.log</file>
<append>true</append>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>3.4.4 RollingFileAppender
支持日志文件滾動的增強FileAppender,必須配置rollingPolicy
特有屬性:
file: 當前活動日志文件路徑rollingPolicy: 滾動策略配置triggeringPolicy: 觸發(fā)策略配置
示例:
<appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/myapp.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/myapp.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>3.4.5 滾動策略詳解
Logback提供多種滾動策略:
TimeBasedRollingPolicy基于時間的滾動策略
| 屬性 | 說明 |
|---|---|
| fileNamePattern | 滾動文件命名模式(必須包含%d) |
| maxHistory | 保留的歷史日志文件最大數(shù)量 |
| totalSizeCap | 所有日志文件總大小限制 |
| cleanHistoryOnStart | 啟動時是否清理歷史文件(默認false) |
SizeAndTimeBasedRollingPolicy
結(jié)合時間和大小的滾動策略
| 屬性 | 說明 |
|---|---|
| fileNamePattern | 必須包含%d和%i |
| maxFileSize | 單個文件最大大小 |
| maxHistory | 保留的歷史日志文件最大數(shù)量 |
| totalSizeCap | 所有日志文件總大小限制 |
FixedWindowRollingPolicy
固定窗口滾動策略
| 屬性 | 說明 |
|---|---|
| minIndex | 窗口最小索引 |
| maxIndex | 窗口最大索引 |
| fileNamePattern | 必須包含%i |
3.4.6 其他Appender類型
| Appender類型 | 類名 | 用途 |
|---|---|---|
| SMTPAppender | ch.qos.logback.classic.net.SMTPAppender | 通過郵件發(fā)送錯誤日志 |
| DBAppender | ch.qos.logback.classic.db.DBAppender | 存儲日志到數(shù)據(jù)庫 |
| SocketAppender | ch.qos.logback.classic.net.SocketAppender | 通過網(wǎng)絡socket發(fā)送日志 |
| SyslogAppender | ch.qos.logback.classic.net.SyslogAppender | 發(fā)送日志到syslog服務器 |
3.5 <encoder> 元素
Encoder負責將日志事件轉(zhuǎn)換為字節(jié)數(shù)組并寫入輸出流。
3.5.1 PatternLayoutEncoder
最常用的Encoder實現(xiàn),支持豐富的模式表達式:
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
<outputPatternAsHeader>false</outputPatternAsHeader>
<charset>UTF-8</charset>
</encoder>常用轉(zhuǎn)換符:
| 轉(zhuǎn)換符 | 說明 |
|---|---|
| %d | 日期時間 |
| %thread | 線程名 |
| %level | 日志級別 |
| %logger | Logger名稱 |
| %msg | 日志消息 |
| %n | 換行符 |
| %caller | 調(diào)用者信息 |
| %mdc | MDC內(nèi)容 |
| %ex | 異常堆棧 |
| %marker | 日志標記 |
日期格式:%d{格式},格式遵循Java SimpleDateFormat:
%d{yyyy-MM-dd HH:mm:ss.SSS}%d{ISO8601}%d{ABSOLUTE}
Logger名稱縮寫:%logger{長度},如%logger{36}表示最長顯示36個字符
3.5.2 LayoutWrappingEncoder
包裝其他Layout實現(xiàn)的Encoder:
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</layout>
</encoder>3.6 <filter> 元素
Filter用于對日志事件進行過濾,可以配置在Appender或Logger上。
3.6.1 LevelFilter
精確匹配特定級別:
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch> <!-- 匹配時的動作 -->
<onMismatch>DENY</onMismatch> <!-- 不匹配時的動作 -->
</filter>動作類型:
ACCEPT: 接受日志事件DENY: 拒絕日志事件NEUTRAL: 中立,由后續(xù)過濾器決定
3.6.2 ThresholdFilter
閾值過濾,接受>=指定級別的日志:
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>3.6.3 EvaluatorFilter
使用Groovy表達式過濾:
<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
<evaluator class="ch.qos.logback.classic.boolex.GEventEvaluator">
<expression>
e.level.toInt() >= WARN.toInt() &&
e.getMessage().contains("important")
</expression>
</evaluator>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>3.6.4 自定義Filter
實現(xiàn)ch.qos.logback.core.filter.Filter接口:
public class SampleFilter extends Filter<ILoggingEvent> {
@Override
public FilterReply decide(ILoggingEvent event) {
if (event.getMessage().contains("special")) {
return FilterReply.ACCEPT;
}
return FilterReply.NEUTRAL;
}
}配置:
<filter class="com.example.SampleFilter" />
3.7 <logger> 和 <root> 元素
3.7.1 <logger>
配置特定Logger的日志行為:
屬性:
name: Logger名稱(通常為包或類名)level: 日志級別additivity: 是否向上傳遞日志(默認為true)
示例:
<!-- 配置特定包的日志級別 -->
<logger name="com.example" level="DEBUG" />
<!-- 配置特定類的日志級別并禁用additivity -->
<logger name="com.example.Service" level="TRACE" additivity="false">
<appender-ref ref="SPECIAL_APPENDER" />
</logger>3.7.2 <root>
配置根Logger,所有Logger最終都繼承自Root Logger:
屬性:
level: 根Logger的日志級別
示例:
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>Logger繼承規(guī)則:
- 如果沒有配置特定logger,則繼承最近的祖先logger的級別
- 如果沒有配置任何logger,則使用root logger的級別
- 如果配置了logger但沒有指定級別,則繼承最近的祖先logger的級別
3.8 <turboFilter> 元素
TurboFilter是全局過濾器,在所有Logger之前執(zhí)行:
<turboFilter class="ch.qos.logback.classic.turbo.MarkerFilter">
<Marker>important</Marker>
<OnMatch>ACCEPT</OnMatch>
<OnMismatch>NEUTRAL</OnMismatch>
</turboFilter>常用TurboFilter:
MDCFilter: 基于MDC值過濾DynamicThresholdFilter: 動態(tài)閾值過濾LoggerFilter: 基于Logger名稱過濾
四、高級配置與使用技巧
4.1 日志級別詳解
Logback支持以下日志級別(從低到高):
- TRACE
- DEBUG
- INFO
- WARN
- ERROR
日志級別繼承規(guī)則:
- 如果沒有配置特定logger,則繼承最近的祖先logger的級別
- 如果沒有配置任何logger,則使用root logger的級別
4.2 使用Spring Boot屬性
在logback-spring.xml中可以使用Spring Boot的屬性:
<springProperty scope="context" name="appName" source="spring.application.name" defaultValue="myApp"/>
<property name="LOG_HOME" value="./logs/${appName}" />4.3 基于Profile的配置
可以為不同的Spring Profile配置不同的日志策略:
<springProfile name="dev">
<logger name="com.example.demo" level="DEBUG" />
</springProfile>
<springProfile name="prod">
<logger name="com.example.demo" level="INFO" />
<root level="WARN">
<appender-ref ref="FILE" />
</root>
</springProfile>4.4 日志文件滾動策略
TimeBasedRollingPolicy: 基于時間的滾動策略
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/application.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>SizeAndTimeBasedRollingPolicy: 基于時間和大小的滾動策略
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/application.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>10MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>4.5 日志過濾
LevelFilter: 按級別過濾
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!-- 其他配置 -->
</appender>ThresholdFilter: 閾值過濾
<appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
<!-- 其他配置 -->
</appender>4.6 異步日志
使用AsyncAppender可以提高日志性能:
<appender name="ASYNC_FILE" class="ch.qos.logback.classic.AsyncAppender">
<queueSize>512</queueSize>
<discardingThreshold>0</discardingThreshold>
<includeCallerData>false</includeCallerData>
<appender-ref ref="FILE" />
</appender>參數(shù)說明:
queueSize: 隊列大?。J256)discardingThreshold: 當隊列剩余容量小于此值時,丟棄TRACE、DEBUG和INFO級別的日志(默認隊列大小的20%)includeCallerData: 是否包含調(diào)用者數(shù)據(jù)(影響性能)
最佳實踐:
- 生產(chǎn)環(huán)境推薦隊列大小設置為512-2048
- 除非必要,否則關閉includeCallerData
- 對于關鍵日志,設置discardingThreshold=0確保不丟棄
4.7 MDC (Mapped Diagnostic Context)
MDC可以用于在日志中添加上下文信息:
import org.slf4j.MDC;
public class UserService {
private static final Logger logger = LoggerFactory.getLogger(UserService.class);
public void login(String userId) {
MDC.put("userId", userId);
logger.info("User logged in");
MDC.remove("userId");
}
}在配置文件中使用:
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{userId}] %-5level %logger{36} - %msg%n</pattern>高級用法:
<!-- 僅當MDC中存在userId時才顯示 -->
<pattern>%d{yyyy-MM-dd} [%thread] %mdc{userId:-} %-5level %logger{36} - %msg%n</pattern>4.8 條件配置
使用<if>條件語句(需要Janino庫):
<if condition='property("env").equals("prod")'>
<then>
<root level="WARN">
<appender-ref ref="FILE" />
</root>
</then>
<else>
<root level="DEBUG">
<appender-ref ref="CONSOLE" />
</root>
</else>
</if>五、最佳實踐與常見問題
5.1 日志最佳實踐
合理使用日志級別:
- TRACE: 非常詳細的系統(tǒng)運行信息,通常只在開發(fā)時使用
- DEBUG: 調(diào)試信息,有助于診斷問題
- INFO: 重要的業(yè)務處理信息
- WARN: 潛在的問題,但系統(tǒng)還能正常工作
- ERROR: 錯誤事件,但系統(tǒng)還能繼續(xù)運行
日志內(nèi)容規(guī)范:
- 記錄有意義的業(yè)務信息
- 避免記錄敏感信息(密碼、信用卡號等)
- 異常應該記錄堆棧(使用logger.error(“message”, e))
性能考慮:
- 生產(chǎn)環(huán)境避免使用DEBUG級別
- 謹慎使用調(diào)用者數(shù)據(jù)(%C, %M, %F, %L等)
- 考慮使用異步日志
5.2 常見問題解決方案
問題1:日志文件不滾動
- 檢查
fileNamePattern中的日期模式 - 確保日志量達到滾動條件
- 檢查文件權限
解決方案:
<!-- 確保配置了觸發(fā)策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>logs/app-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxFileSize>50MB</maxFileSize> <!-- 必須配置 -->
<maxHistory>30</maxHistory>
</rollingPolicy>問題2:日志文件太大
- 調(diào)整
maxFileSize和maxHistory - 使用
totalSizeCap限制總大小 - 考慮按級別分離日志文件
問題3:日志輸出不全
- 檢查logger的級別設置
- 檢查是否有過濾器過濾掉了日志
- 檢查是否有多個配置文件的沖突
問題4:日志輸出亂碼
解決方案:
<encoder>
<pattern>%msg%n</pattern>
<charset>UTF-8</charset> <!-- 明確指定字符集 -->
</encoder>六、完整配置示例
6.1 開發(fā)環(huán)境配置 (logback-spring-dev.xml)
<?xml version="1.0" encoding="UTF-8"?>
<!-- Logback配置文件的根標簽,所有配置元素都需包含在此標簽內(nèi) -->
<configuration>
<!-- 屬性定義部分,通過 <property> 標簽定義可復用的屬性,方便在配置文件中引用 -->
<!-- 定義日志文件存儲的主目錄 -->
<property name="LOG_HOME" value="/var/logs/myapp" />
<!-- 定義日志輸出的格式模式,包含日期時間、線程名、日志級別、日志記錄器名稱和日志消息 -->
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
<!-- 控制臺Appender配置,用于將日志輸出到控制臺 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!-- 編碼器配置,將日志事件轉(zhuǎn)換為指定格式的字符串 -->
<encoder>
<!-- 使用前面定義的日志格式模式 -->
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<!-- 過濾器配置,只允許指定級別及以上的日志通過 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<!-- 設置過濾級別為 WARN,即只輸出 WARN 及以上級別的日志 -->
<level>WARN</level>
</filter>
</appender>
<!-- 主文件Appender配置,用于將日志輸出到文件,并支持滾動策略 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 指定日志文件的路徑,使用前面定義的日志主目錄 -->
<file>${LOG_HOME}/application.log</file>
<!-- 編碼器配置,將日志事件轉(zhuǎn)換為指定格式的字符串 -->
<encoder>
<!-- 使用前面定義的日志格式模式 -->
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<!-- 滾動策略配置,基于文件大小和時間進行滾動 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 滾動后的文件命名模式,包含日期和序號 -->
<fileNamePattern>${LOG_HOME}/application.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 單個日志文件的最大大小,超過此大小將進行滾動 -->
<maxFileSize>50MB</maxFileSize>
<!-- 保留的歷史日志文件的最大天數(shù) -->
<maxHistory>30</maxHistory>
<!-- 所有日志文件的總大小上限 -->
<totalSizeCap>5GB</totalSizeCap>
</rollingPolicy>
</appender>
<!-- 錯誤日志Appender配置,專門用于記錄 ERROR 級別的日志 -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 指定錯誤日志文件的路徑,使用前面定義的日志主目錄 -->
<file>${LOG_HOME}/error.log</file>
<!-- 編碼器配置,將日志事件轉(zhuǎn)換為指定格式的字符串 -->
<encoder>
<!-- 使用前面定義的日志格式模式 -->
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<!-- 過濾器配置,只允許 ERROR 級別的日志通過 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 設置過濾級別為 ERROR -->
<level>ERROR</level>
<!-- 當日志級別匹配時,允許通過 -->
<onMatch>ACCEPT</onMatch>
<!-- 當日志級別不匹配時,拒絕通過 -->
<onMismatch>DENY</onMismatch>
</filter>
<!-- 滾動策略配置,基于時間進行滾動 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 滾動后的文件命名模式,包含日期 -->
<fileNamePattern>${LOG_HOME}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 保留的歷史錯誤日志文件的最大天數(shù) -->
<maxHistory>90</maxHistory>
</rollingPolicy>
</appender>
<!-- 異步Appender配置,用于異步處理日志,提高性能 -->
<appender name="ASYNC_FILE" class="ch.qos.logback.classic.AsyncAppender">
<!-- 異步隊列的大小,即最多可緩存的日志事件數(shù)量 -->
<queueSize>1024</queueSize>
<!-- 丟棄閾值,當隊列剩余空間小于此值時,會丟棄部分日志事件,設置為 0 表示不丟棄 -->
<discardingThreshold>0</discardingThreshold>
<!-- 引用前面定義的主文件Appender,將異步處理后的日志輸出到該 Appender -->
<appender-ref ref="FILE" />
</appender>
<!-- Logger配置部分,用于指定不同包或類的日志級別和輸出目的地 -->
<!-- 針對 com.example 包及其子包,設置日志級別為 INFO -->
<logger name="com.example" level="INFO" />
<!-- 針對 org.springframework 包及其子包,設置日志級別為 WARN -->
<logger name="org.springframework" level="WARN" />
<!-- 針對 org.hibernate.SQL 類,設置日志級別為 DEBUG,并關閉日志的追加性 -->
<logger name="org.hibernate.SQL" level="DEBUG" additivity="false">
<!-- 只將該類的日志輸出到主文件Appender -->
<appender-ref ref="FILE" />
</logger>
<!-- Root Logger配置,是所有 Logger 的父 Logger,設置全局的日志級別和輸出目的地 -->
<root level="INFO">
<!-- 將日志輸出到控制臺Appender -->
<appender-ref ref="CONSOLE" />
<!-- 將日志異步輸出到主文件Appender -->
<appender-ref ref="ASYNC_FILE" />
<!-- 將 ERROR 級別的日志輸出到錯誤日志Appender -->
<appender-ref ref="ERROR_FILE" />
</root>
</configuration>6.2 生產(chǎn)環(huán)境配置 (logback-spring-prod.xml)
<?xml version="1.0" encoding="UTF-8"?>
<!-- Logback 配置文件的根標簽,所有配置項都需包含在其中 -->
<configuration>
<!-- 使用 springProperty 標簽從 Spring 上下文中獲取屬性值。
scope="context" 表示從 Spring 上下文獲取屬性,
name="appName" 定義了屬性名,
source="spring.application.name" 指定從 Spring 配置中獲取名為 spring.application.name 的屬性值,
defaultValue="myApp" 若未獲取到屬性值,則使用默認值 myApp -->
<springProperty scope="context" name="appName" source="spring.application.name" defaultValue="myApp"/>
<!-- 定義日志存儲的主目錄屬性,路徑為 /var/log/ 加上前面獲取的應用名稱 -->
<property name="LOG_HOME" value="/var/log/${appName}" />
<!-- 定義日志輸出的格式模式,包含日期時間、線程名、日志級別、日志記錄器名稱和日志消息 -->
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
<!-- 異步文件輸出 Appender 配置,將日志異步寫入文件以提高性能 -->
<appender name="ASYNC_FILE" class="ch.qos.logback.classic.AsyncAppender">
<!-- 異步隊列的大小,即最多可緩存的日志事件數(shù)量為 512 -->
<queueSize>512</queueSize>
<!-- 丟棄閾值,設置為 0 表示不丟棄日志事件 -->
<discardingThreshold>0</discardingThreshold>
<!-- 引用名為 FILE 的 Appender,將異步處理后的日志發(fā)送到該 Appender -->
<appender-ref ref="FILE" />
</appender>
<!-- 主日志文件 Appender 配置,用于將日志寫入文件并支持滾動策略 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 指定日志文件的路徑,使用前面定義的日志主目錄 -->
<file>${LOG_HOME}/application.log</file>
<!-- 編碼器配置,將日志事件轉(zhuǎn)換為指定格式的字符串 -->
<encoder>
<!-- 使用前面定義的日志格式模式 -->
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<!-- 滾動策略配置,基于文件大小和時間進行滾動 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 滾動后的文件命名模式,包含日期和序號 -->
<fileNamePattern>${LOG_HOME}/application.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 單個日志文件的最大大小,超過此大小將進行滾動 -->
<maxFileSize>50MB</maxFileSize>
<!-- 保留的歷史日志文件的最大天數(shù) -->
<maxHistory>30</maxHistory>
<!-- 所有日志文件的總大小上限 -->
<totalSizeCap>5GB</totalSizeCap>
</rollingPolicy>
</appender>
<!-- 錯誤日志異步輸出 Appender 配置,將錯誤日志異步寫入文件 -->
<appender name="ASYNC_ERROR_FILE" class="ch.qos.logback.classic.AsyncAppender">
<!-- 異步隊列的大小,即最多可緩存的日志事件數(shù)量為 512 -->
<queueSize>512</queueSize>
<!-- 丟棄閾值,設置為 0 表示不丟棄日志事件 -->
<discardingThreshold>0</discardingThreshold>
<!-- 引用名為 ERROR_FILE 的 Appender,將異步處理后的錯誤日志發(fā)送到該 Appender -->
<appender-ref ref="ERROR_FILE" />
</appender>
<!-- 錯誤日志文件 Appender 配置,專門用于記錄錯誤日志并支持滾動策略 -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 指定錯誤日志文件的路徑,使用前面定義的日志主目錄 -->
<file>${LOG_HOME}/error.log</file>
<!-- 過濾器配置,只允許 ERROR 及以上級別的日志通過 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<!-- 設置過濾級別為 ERROR -->
<level>ERROR</level>
</filter>
<!-- 編碼器配置,將日志事件轉(zhuǎn)換為指定格式的字符串 -->
<encoder>
<!-- 使用前面定義的日志格式模式 -->
<pattern>${LOG_PATTERN}</pattern>
</encoder>
<!-- 滾動策略配置,基于文件大小和時間進行滾動 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 滾動后的文件命名模式,包含日期和序號 -->
<fileNamePattern>${LOG_HOME}/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!-- 單個錯誤日志文件的最大大小,超過此大小將進行滾動 -->
<maxFileSize>50MB</maxFileSize>
<!-- 保留的歷史錯誤日志文件的最大天數(shù) -->
<maxHistory>60</maxHistory>
<!-- 所有錯誤日志文件的總大小上限 -->
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy>
</appender>
<!-- 郵件通知 Appender 配置,當出現(xiàn)錯誤日志時發(fā)送郵件通知 -->
<appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
<!-- SMTP 服務器地址 -->
<smtpHost>smtp.example.com</smtpHost>
<!-- SMTP 服務器端口 -->
<smtpPort>587</smtpPort>
<!-- 發(fā)件人郵箱用戶名 -->
<username>user@example.com</username>
<!-- 發(fā)件人郵箱密碼 -->
<password>password</password>
<!-- 收件人郵箱地址 -->
<to>admin@example.com</to>
<!-- 發(fā)件人郵箱地址 -->
<from>noreply@example.com</from>
<!-- 郵件主題,包含應用名稱、日志記錄器名稱和日志消息 -->
<subject>${appName} - ERROR: %logger{20} - %m</subject>
<!-- 郵件內(nèi)容布局配置 -->
<layout class="ch.qos.logback.classic.PatternLayout">
<!-- 郵件內(nèi)容的格式模式,包含日期時間、線程名、日志級別、日志記錄器名稱、日志消息和異常信息 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n%ex</pattern>
</layout>
<!-- 循環(huán)緩沖區(qū)跟蹤器配置,用于緩存一定數(shù)量的日志事件 -->
<cyclicBufferTracker class="ch.qos.logback.core.spi.CyclicBufferTracker">
<!-- 緩沖區(qū)大小,即最多緩存 10 條日志事件 -->
<bufferSize>10</bufferSize>
</cyclicBufferTracker>
</appender>
<!-- Root Logger 配置,是所有 Logger 的父 Logger,設置全局的日志級別和輸出目的地 -->
<root level="WARN">
<!-- 將日志異步輸出到主日志文件 Appender -->
<appender-ref ref="ASYNC_FILE" />
<!-- 將錯誤日志異步輸出到錯誤日志文件 Appender -->
<appender-ref ref="ASYNC_ERROR_FILE" />
<!-- 當出現(xiàn)錯誤日志時,發(fā)送郵件通知 -->
<appender-ref ref="EMAIL" />
</root>
</configuration>到此這篇關于Spring Boot集成Logback終極指南:從基礎到高級配置的文章就介紹到這了,更多相關Spring Boot集成Logback配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- SpringBoot集成logback打印彩色日志的代碼實現(xiàn)
- Spring Boot中集成各種日志框架Logback、Log4j2和Java Util Logging的步驟和示例代碼
- SpringBoot快速集成Logback日志組件
- SpringBoot3集成SLF4J+logback進行日志記錄的實現(xiàn)
- 淺談spring boot 集成 log4j 解決與logback沖突的問題
- Spring Boot整合logback一個簡單的日志集成架構(gòu)
- springboot項目配置logback-spring.xml實現(xiàn)按日期歸檔日志的方法
- IDEA?設置?SpringBoot?logback?彩色日志的解決方法?附配置文件
- 解決springboot配置logback-spring.xml不起作用問題
相關文章
SpringBoot中@Autowired注入service時出現(xiàn)循環(huán)依賴問題的解決方法
在Spring Boot開發(fā)過程中,@Autowired注入Service時出現(xiàn)循環(huán)依賴是一個常見問題,循環(huán)依賴指的是兩個或多個Bean相互依賴,形成閉環(huán),導致Spring容器無法正常初始化這些Bean,這里提供幾種解決Spring Boot中@Autowired注入Service時循環(huán)依賴問題的方法2024-02-02
Mybatis插件+注解實現(xiàn)數(shù)據(jù)脫敏方式
這篇文章主要介紹了Mybatis插件+注解實現(xiàn)數(shù)據(jù)脫敏方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09
Intellij IDEA導入eclipse web項目的操作步驟詳解
Eclipse當中的web項目都會有這兩個文件,但是idea當中應該是沒有的,所以導入會出現(xiàn)兼容問題,但是本篇文章會教大家如何導入,并且導入過后還能使用tomcat運行,需要的朋友可以參考下2023-08-08
java的Jackson框架實現(xiàn)輕易轉(zhuǎn)換JSON
本篇文章主要介紹了java的Jackson框架實現(xiàn)輕易轉(zhuǎn)換JSON,Jackson將Java對象轉(zhuǎn)換成json對象和xml文檔,同樣也可以將json、xml轉(zhuǎn)換成Java對象,有興趣的可以了解一下。2017-02-02

