最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Boot集成Logback終極指南之從基礎(chǔ)到高級配置實戰(zhàn)指南

 更新時間:2025年05月13日 17:16:26   作者:Clf丶憶笙  
Logback是一個可靠、通用且快速的Java日志框架,作為Log4j的繼承者,由Log4j創(chuàng)始人設(shè)計,這篇文章主要介紹了Spring Boot集成Logback終極指南之從基礎(chǔ)到高級配置實戰(zhàn)指南,需要的朋友可以參考下

一、Logback簡介與Spring Boot集成基礎(chǔ)

1.1 Logback是什么?

Logback是一個可靠、通用且快速的Java日志框架,作為Log4j的繼承者,由Log4j創(chuàng)始人設(shè)計。它由三個模塊組成:

  • logback-core:基礎(chǔ)模塊
  • logback-classic:實現(xiàn)了SLF4J API
  • logback-access:與Servlet容器集成提供HTTP訪問日志功能

為什么選擇Logback?

  • 性能比Log4j更高
  • 豐富的文檔
  • 自動重新加載配置文件
  • 自動壓縮日志文件
  • 更靈活的過濾功能
  • 更豐富的日志格式

1.2 Spring Boot默認日志框架

Spring Boot默認使用Logback作為日志框架,當你使用spring-boot-starterspring-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配置文件的根元素,支持以下重要屬性:

屬性名類型默認值描述
scanbooleanfalse是否監(jiān)視配置文件變化
scanPeriod時間間隔1分鐘檢查配置文件變化的時間間隔
debugbooleanfalse是否打印Logback內(nèi)部調(diào)試信息
packagingDatabooleanfalse是否包含調(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)境應關(guān)閉scandebug以避免性能開銷
  • 僅在需要診斷問題時開啟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.out
  • withJansi: 是否啟用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類型類名用途
SMTPAppenderch.qos.logback.classic.net.SMTPAppender通過郵件發(fā)送錯誤日志
DBAppenderch.qos.logback.classic.db.DBAppender存儲日志到數(shù)據(jù)庫
SocketAppenderch.qos.logback.classic.net.SocketAppender通過網(wǎng)絡socket發(fā)送日志
SyslogAppenderch.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日志級別
%loggerLogger名稱
%msg日志消息
%n換行符
%caller調(diào)用者信息
%mdcMDC內(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)境推薦隊列大小設(shè)置為512-2048
  • 除非必要,否則關(guān)閉includeCallerData
  • 對于關(guān)鍵日志,設(shè)置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中的日期模式
  • 確保日志量達到滾動條件
  • 檢查文件權(quán)限

解決方案

<!-- 確保配置了觸發(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)整maxFileSizemaxHistory
  • 使用totalSizeCap限制總大小
  • 考慮按級別分離日志文件

問題3:日志輸出不全

  • 檢查logger的級別設(shè)置
  • 檢查是否有過濾器過濾掉了日志
  • 檢查是否有多個配置文件的沖突

問題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">
            <!-- 設(shè)置過濾級別為 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">
            <!-- 設(shè)置過濾級別為 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>
        <!-- 丟棄閾值,當隊列剩余空間小于此值時,會丟棄部分日志事件,設(shè)置為 0 表示不丟棄 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 引用前面定義的主文件Appender,將異步處理后的日志輸出到該 Appender -->
        <appender-ref ref="FILE" />
    </appender>
    <!-- Logger配置部分,用于指定不同包或類的日志級別和輸出目的地 -->
    <!-- 針對 com.example 包及其子包,設(shè)置日志級別為 INFO -->
    <logger name="com.example" level="INFO" />
    <!-- 針對 org.springframework 包及其子包,設(shè)置日志級別為 WARN -->
    <logger name="org.springframework" level="WARN" />
    <!-- 針對 org.hibernate.SQL 類,設(shè)置日志級別為 DEBUG,并關(guān)閉日志的追加性 -->
    <logger name="org.hibernate.SQL" level="DEBUG" additivity="false">
        <!-- 只將該類的日志輸出到主文件Appender -->
        <appender-ref ref="FILE" />
    </logger>
    <!-- Root Logger配置,是所有 Logger 的父 Logger,設(shè)置全局的日志級別和輸出目的地 -->
    <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>
        <!-- 丟棄閾值,設(shè)置為 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>
        <!-- 丟棄閾值,設(shè)置為 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">
            <!-- 設(shè)置過濾級別為 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,設(shè)置全局的日志級別和輸出目的地 -->
    <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>

到此這篇關(guān)于Spring Boot集成Logback終極指南:從基礎(chǔ)到高級配置的文章就介紹到這了,更多相關(guān)Spring Boot集成Logback配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java查找圖中兩點之間所有路徑

    java查找圖中兩點之間所有路徑

    這篇文章主要為大家詳細介紹了java查找圖中兩點之間所有路徑,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Java設(shè)計模式之適配器模式的實現(xiàn)

    Java設(shè)計模式之適配器模式的實現(xiàn)

    這篇文章主要介紹了Java設(shè)計模式之適配器模式的實現(xiàn),適配器模式(Adapter Pattern)是作為兩個不兼容的接口之間的橋梁,這種類型的設(shè)計模式屬于結(jié)構(gòu)型模式,它結(jié)合了兩個獨立接口的功能,需要的朋友可以參考下
    2023-11-11
  • SpringBoot攔截器Filter的使用方法詳解

    SpringBoot攔截器Filter的使用方法詳解

    這篇文章主要介紹了SpringBoot攔截器Filter的使用方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • spring的xml方式配置bean全過程

    spring的xml方式配置bean全過程

    文章介紹了Spring框架中配置bean的四種情況:無參構(gòu)造方法、有參構(gòu)造方法、Setter方法和實現(xiàn)InitializingBean接口,還提到了IOC控制反轉(zhuǎn)、DI依賴注入和AOP面向切面編程是Spring的三大特性
    2026-03-03
  • 關(guān)于@RequestParam的使用所遇到的404問題

    關(guān)于@RequestParam的使用所遇到的404問題

    這篇文章主要介紹了關(guān)于@RequestParam的使用所遇到的404問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Springboot線程池并發(fā)處理數(shù)據(jù)優(yōu)化方式

    Springboot線程池并發(fā)處理數(shù)據(jù)優(yōu)化方式

    這篇文章主要介紹了Springboot線程池并發(fā)處理數(shù)據(jù)優(yōu)化方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java常見異常全面梳理(含分類+含義+典型場景)

    Java常見異常全面梳理(含分類+含義+典型場景)

    異常是指程序在執(zhí)行過程中,出現(xiàn)的非正常情況,可能由程序員錯誤、系統(tǒng)錯誤或用戶輸入錯誤引起,下面這篇文章主要介紹了Java常見異常全面梳理的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2026-03-03
  • Gradle快速安裝及入門

    Gradle快速安裝及入門

    今天小編就為大家分享一篇關(guān)于Gradle快速安裝及入門,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • Java使用elasticsearch基礎(chǔ)API使用案例講解

    Java使用elasticsearch基礎(chǔ)API使用案例講解

    這篇文章主要介紹了Java使用elasticsearch基礎(chǔ)API使用案例講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 詳解Java接口簽名(Signature)實現(xiàn)方案

    詳解Java接口簽名(Signature)實現(xiàn)方案

    這篇文章主要介紹了Java接口簽名(Signature)實現(xiàn)方案?,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01

最新評論

司法| 罗定市| 普定县| 依兰县| 广宁县| 都江堰市| 报价| 嘉禾县| 且末县| 西宁市| 和政县| 闵行区| 休宁县| 方山县| 屯门区| 成都市| 荥阳市| 昌邑市| 西乌珠穆沁旗| 永年县| 静宁县| 华蓥市| 福安市| 周至县| 洛扎县| 界首市| 延安市| 蛟河市| 平利县| 安吉县| 景洪市| 周宁县| 岗巴县| 肥城市| 碌曲县| 吉林省| 开封县| 弥勒县| 清水河县| 洪湖市| 会泽县|