logback-spring.xml配置解析(最新整理)
logback-spring.xml 文件是 Spring Boot 項目中用于配置日志框架 Logback 的配置文件。它定義了日志的輸出格式、輸出位置、日志級別等信息。
以下是整個文件的結構化解釋:
一、全局配置
<configuration scan="true" scanPeriod="60 seconds" debug="false">
- scan="true":啟用自動掃描配置文件變化,便于熱更新。
- scanPeriod="60 seconds":每 60 秒檢查一次配置是否變更。
- debug="false":不打印 Logback 內部狀態(tài)調試信息。
二、變量定義與讀取
1. 從 Spring 上下文中讀取配置(如 bootstrap.yml)
<springProperty scope="context" name="logPath" source="logging.path" defaultValue="../logs"/> <springProperty scope="context" name="logLevelRoot" source="logging.level.root" defaultValue="INFO"/> <springProperty scope="context" name="logLevelTrade" source="logging.level.trade" defaultValue="INFO"/> <springProperty scope="context" name="logLevelSign" source="logging.level.sign" defaultValue="INFO"/>
- 使用 <springProperty> 可以從 Spring 配置文件中讀取值,如:
- 日志路徑:logging.path
- 日志級別:logging.level.root, logging.level.trade, logging.level.sign
- 如果未在配置文件中指定,則使用 defaultValue 中的默認值。
2. 自定義常量
<property name="moduleid" value="8176"/> <property name="modulename" value="IALLO_GATEWAY"/>
- 定義模塊 ID 和名稱,供后續(xù)日志文件名和格式中引用。
三、Appender 定義(日志輸出目的地)
1. 控制臺輸出:console
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}][%X{bizSeqNo}][%level][%thread] - [${moduleid}][${modulename}]%m%n</pattern>
</encoder>
</appender>- 輸出到控制臺。
- 格式包含時間戳、MDC上下文中的 bizSeqNo、日志級別、線程名、模塊信息等。
2. 主日志文件:INFO
<appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logPath}/${moduleid}_${modulename}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${logPath}/${moduleid}_${modulename}.log.%d{yyyy-MM-dd}-%i</fileNamePattern>
<maxFileSize>500MB</maxFileSize>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder>...</encoder>
</appender>- 輸出到主日志文件,按天和大小滾動(最大 500MB,保留30天)。
- 文件名示例:GATEWAY.log、GATEWAY.log.2024-04-05-1
- 主日志 = <root> logger + 它綁定的 appender
- 名稱只是標識符,真正起作用的是引用關系和配置內容
- 可以通過重命名來實現(xiàn)更清晰的結構,但一定要記得同步更新引用!
3. 自定義日志文件:TRADE_INFO
<appender name="TRADE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
...
</appender>- 專用于記錄名為 trade 的 logger 的日志。
四、Logger 定義(日志記錄器)
1. 根日志記錄器:root
<root level="${logLevelRoot}">
<appender-ref ref="console"/>
<appender-ref ref="INFO"/>
</root>- 所有未特別指定的日志都走這個配置,除非顯式地為某個 logger(如 trade)單獨配置了 additivity=false,否則它們的日志也會傳遞到 root logger,并寫入主日志文件。
- 默認級別為 INFO,輸出到控制臺和主日志文件。
2. 自定義日志記錄器:trade
<logger name="trade" level="${logLevelTrade}" additivity="false">
<appender-ref ref="TRADE_INFO"/>
</logger>- 名為 trade 的 logger,日志只輸出到 TRADE_INFO appender。
- 不再繼承 root 的 appender(additivity=false),避免重復輸出。
五、典型日志使用方式(Java 示例)
private static final Logger tradeLogger = LoggerFactory.getLogger("trade");
private static final Logger signLogger = LoggerFactory.getLogger("signLog");
tradeLogger.info("這是一個交易日志");
signLogger.warn("這是一個簽約警告");- 日志隔離:通過 additivity=false 實現(xiàn)不同業(yè)務模塊日志分離,防止日志重復輸出。
- 動態(tài)配置:使用 springProperty 可通過外部配置(如 bootstrap.yml)靈活調整日志路徑和級別。
- 日志歸檔策略:使用 SizeAndTimeBasedRollingPolicy 實現(xiàn)按天 + 按大小切分日志文件,便于維護。
六:注意項


七:完整示例代碼
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 通過spring上下文獲取對應的配置信息 -->
<springProperty scope="context" name="logPath" source="logging.path" defaultValue="../logs"/>
<!-- 獲取當前啟動應用的日志級別(取自bootstrap.yml/bootstrap.properties文件) -->
<springProperty scope="context" name="logLevelRoot" source="logging.level.root" defaultValue="INFO"/>
<!-- 獲取當前應用的監(jiān)控日志級別(取自bootstrap.yml/bootstrap.properties文件) -->
<springProperty scope="context" name="logLevelTrade" source="logging.level.trade" defaultValue="INFO"/>
<springProperty scope="context" name="logLevelSign" source="logging.level.sign" defaultValue="INFO"/>
<!-- 定義日志文件常量 -->
<property name="moduleid" value="8176"/>
<property name="modulename" value="IALLO_GATEWAY"/>
<!-- ConsoleAppender 控制臺輸出日志 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}][%X{bizSeqNo}][%level][%thread] - [${moduleid}][${modulename}]%m%n</pattern>
</encoder>
</appender>
<!-- INFO級別日志 appender -->
<appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logPath}/${moduleid}_${modulename}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${logPath}/${moduleid}_${modulename}.log.%d{yyyy-MM-dd}-%i</fileNamePattern>
<maxFileSize>500MB</maxFileSize>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder>
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}][%X{bizSeqNo}][%thread][%level][${modulename}]%m%n</pattern>
</encoder>
</appender>
<!-- INFO級別日志 appender -->
<appender name="TRADE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logPath}/${moduleid}_${modulename}_tradeinfo.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${logPath}/${moduleid}_${modulename}_tradeinfo.log.%d{yyyy-MM-dd}-%i</fileNamePattern>
<maxFileSize>500MB</maxFileSize>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder>
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}][%level][%thread][${moduleid}][${modulename}]%m%n</pattern>
</encoder>
</appender>
<!-- INFO級別日志 appender -->
<appender name="SIGN_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logPath}/${moduleid}_${modulename}_signinfo.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${logPath}/${moduleid}_${modulename}_signinfo.log.%d{yyyy-MM-dd}-%i</fileNamePattern>
<maxFileSize>500MB</maxFileSize>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder>
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}][%level][%thread][${moduleid}][${modulename}]%m%n</pattern>
</encoder>
</appender>
<!-- root級別 INFO -->
<root level="${logLevelRoot}">
<appender-ref ref="console"/>
<appender-ref ref="INFO"/>
</root>
<!-- 日志監(jiān)控 -->
<logger name="trade" level="${logLevelTrade}" additivity="false">
<appender-ref ref="TRADE_INFO"/>
</logger>
<logger name="signLog" level="${logLevelSign}" additivity="false">
<appender-ref ref="SIGN_INFO"/>
</logger>
</configuration>到此這篇關于logback-spring.xml配置解析(最新整理)的文章就介紹到這了,更多相關logback-spring.xml配置內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
解決springboot的aop切面不起作用問題(失效的排查)
這篇文章主要介紹了解決springboot的aop切面不起作用問題(失效的排查),具有很好的參考價值,希望對大家有所幫助。 一起跟隨小編過來看看吧2020-04-04
idea使用pagehelper實現(xiàn)后端分頁功能的步驟詳解
這篇文章主要介紹了idea使用pagehelper實現(xiàn)后端分頁功能的步驟,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09
Spring Cloud 整合Apache-SkyWalking實現(xiàn)鏈路跟蹤的方法
這篇文章主要介紹了Spring Cloud 整合Apache-SkyWalking鏈路跟蹤的示例代碼,代碼簡單易懂,通過圖文相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06
spring @Scheduled定時任務注解使用方法及注意事項小結
Spring的@Scheduled注解用于定時任務調度,默認單線程依次執(zhí)行,可以通過配置多線程調度器或使用@Async注解實現(xiàn)并行執(zhí)行,常見參數包括cron、fixedRate、fixedDelay、initialDelay等,本文介紹spring @Scheduled定時任務注解使用方法,感興趣的朋友一起看看吧2025-02-02
聊聊SpringBoot的@Scheduled的并發(fā)問題
這篇文章主要介紹了聊聊SpringBoot的@Scheduled的并發(fā)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11

