Logback使用和常用配置

Logback 是 Spring Boot 默認集成的日志框架,相比 Log4j,它性能更高、配置更靈活,并且天然支持 Spring Profile 多環境配置。以下是詳細配置步驟及常用配置示例。


一、添加依賴(非 Spring Boot 項目)

若項目未使用 Spring Boot,需手動添加 Logback 依賴:

<!-- Maven 依賴 -->
<dependencies><!-- Logback 核心 --><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.4.14</version></dependency><!-- 支持 Spring Profile 配置 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId><version>3.2.0</version></dependency>
</dependencies>

二、Logback 配置文件

配置文件名為 logback-spring.xmlSpring 推薦命名,logback-spring.xml,SpringBoot會自動加載),放置在 src/main/resources 目錄下。

完整配置示例
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds"><!-- 通用日志格式 --><property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" /><!-- 日志文件路徑 --><property name="LOG_DIR" value="logs" /><property name="LOG_FILE" value="${LOG_DIR}/app.log" /><!-- 控制臺輸出(開發環境) --><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${LOG_PATTERN}</pattern></encoder><!-- 僅 dev 環境啟用 name ="dev" dev是application.yaml文件中的spring.profiles.active的值 --><springProfile name="dev"><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>DEBUG</level></filter></springProfile></appender><!-- 滾動文件輸出(生產環境) --><appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_FILE}</file><encoder><pattern>${LOG_PATTERN}</pattern></encoder><!-- 滾動策略:按時間 + 大小 --><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${LOG_DIR}/app-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern><maxFileSize>100MB</maxFileSize><maxHistory>30</maxHistory><totalSizeCap>10GB</totalSizeCap></rollingPolicy></appender><!-- 異步日志(提升性能) --><appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"><queueSize>1024</queueSize><discardingThreshold>0</discardingThreshold><appender-ref ref="ROLLING_FILE" /></appender><!-- 日志記錄器配置 --><root level="INFO"><appender-ref ref="CONSOLE" /><appender-ref ref="ASYNC" /></root><!-- MyBatis SQL 日志 --><logger name="com.example.mapper" level="DEBUG" additivity="false"><appender-ref ref="CONSOLE" /></logger><!-- Spring 框架日志降級 --><logger name="org.springframework" level="WARN" />
</configuration>

注:日志文件如果不是logback-spring.xml的名字,springProfile配置會讀取不到devprod等環境變量的值

三、核心配置詳解

1. 全局配置
  • <configuration scan="true" scanPeriod="30 seconds">
    啟用配置文件熱更新,每隔 30 秒檢查配置變化。
  • <property>
    定義變量(如 LOG_PATTERN),便于復用。

2. 輸出器(Appenders)
a. 控制臺輸出(ConsoleAppender)
  • <encoder>:定義日志格式,%d 表示時間,%thread 為線程名,%-5level 左對齊日志級別。
  • <springProfile>:根據 Spring Profile 動態啟用(如僅 dev 環境輸出 DEBUG 級別)。
b. 滾動文件輸出(RollingFileAppender)
  • <rollingPolicy>
    • SizeAndTimeBasedRollingPolicy:按時間和文件大小滾動。
    • fileNamePattern:歸檔文件名(%i 為滾動序號,.gz 自動壓縮)。
    • maxFileSize:單個文件最大大小(觸發滾動)。
    • maxHistory:保留最近 30 天日志。
    • totalSizeCap:日志總量上限(避免磁盤占滿)。
c. 異步輸出(AsyncAppender)
  • <queueSize>:異步隊列大小(默認 256,增大可減少阻塞)。
  • <discardingThreshold>:隊列剩余容量閾值(0 表示隊列滿時丟棄 INFO 以下日志)。

3. 日志記錄器(Loggers)
  • <root>:根記錄器,所有日志的默認配置。
  • <logger>
    • name:包或類名(如 com.example.mapper)。
    • level:日志級別(優先級高于 root)。
    • additivity="false":禁止向上傳遞日志事件(避免重復輸出)。

四、Spring Profile 多環境配置

通過 springProfile 標簽實現環境差異化配置:

<!-- 開發環境:輸出 DEBUG 到控制臺 name ="dev" dev是application.yaml文件中的spring.profiles.active的值 -->
<springProfile name="dev"><root level="DEBUG"><appender-ref ref="CONSOLE" /></root>
</springProfile><!-- 生產環境:僅輸出 ERROR 到文件 name ="prod" prod是application.yaml文件中的spring.profiles.active的值-->
<springProfile name="prod"><root level="INFO"><appender-ref ref="ASYNC" /></root><logger name="com.example" level="WARN" />
</springProfile>

五、代碼中使用日志

在類中通過 SLF4J API 記錄日志:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;@Service
public class UserService {private static final Logger logger = LoggerFactory.getLogger(UserService.class);public void createUser(String username) {logger.debug("創建用戶: {}", username);  // DEBUG 級別需配置對應 Loggerlogger.info("用戶創建成功: {}", username);}
}

六、常見問題排查

  1. 日志未輸出

    • 檢查 logback-spring.xml 是否在 src/main/resources 目錄。
    • 確認依賴無沖突(排除其他日志框架如 Log4j)。
    • 檢查日志級別是否允許(如 DEBUG 需 Logger 和 Root 均開啟)。
  2. 滾動文件未生成

    • 確認 LOG_DIR 路徑存在且有寫入權限。
    • 檢查 fileNamePattern 是否符合預期(如日期格式)。
  3. 性能問題

    • 使用異步 Appender 并增加 queueSize
    • 避免高頻輸出 DEBUG 日志(生產環境關閉)。

七、總結

通過 Logback 可實現:

  1. 多環境差異化配置:利用 springProfile 標簽。
  2. 高效日志管理:異步輸出 + 滾動歸檔。
  3. 精細化日志控制:按包或類設置級別。

建議生產環境配置:

  • 使用 AsyncAppender 提升性能。
  • 限制 maxHistorytotalSizeCap 防止磁盤溢出。
  • 關閉非必要 DEBUG 日志。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/73793.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/73793.shtml
英文地址,請注明出處:http://en.pswp.cn/web/73793.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL基礎語法DDLDML

目錄 #1.創建和刪除數據庫 ?#2.如果有lyt就刪除,沒有則創建一個新的lyt #3.切換到lyt數據庫下 #4.創建數據表并設置列及其屬性,name是關鍵詞要用name包圍 ?編輯 #5.刪除數據表 #5.查看創建的student表 #6.向student表中添加數據,數據要與列名一一對應 #7.查詢studen…

在windows下安裝windows+Ubuntu16.04雙系統(下)

這篇文章的內容主要來源于這篇文章&#xff0c;為正式安裝windowsUbuntu16.04雙系統部分。在正式安裝前&#xff0c;若還沒有進行前期準備工作&#xff08;1.分區2.制作啟動u盤&#xff09;&#xff0c;見《在windows下安裝windowsUbuntu16.04雙系統(上)》 二、正式安裝Ubuntu …

Ubuntu24.04 離線安裝 MySQL8.0.41

一、環境準備 1.1 官方下載MySQL8.0.41 完整包 1.2 上傳包 & 解壓 上傳包名稱是&#xff1a;mysql-server_8.0.41-1ubuntu24.04_amd64.deb-bundle.tar # 切換到上傳目錄 cd /home/MySQL8 # 解壓&#xff1a; tar -xvf mysql-server_8.0.41-1ubuntu24.04_amd64.deb-bundl…

記錄一次Dell服務器更換內存條報錯解決過程No memory found

文章目錄 問題問題分析解決流程總結 問題 今天給服務器添加了幾個內存條&#xff0c;開啟后報錯 No memory found No useable DlMMs found. Verify the DlMMsare properly seated and that they are installed in the correct sockets. 問題分析 這個錯誤說明服務器在啟動時沒…

Apache HttpClient使用

一、Apache HttpClient 基礎版 HttpClients 是 Apache HttpClient 庫中的一個工具類&#xff0c;用于創建和管理 HTTP 客戶端實例。Apache HttpClient 是一個強大的 Java HTTP 客戶端庫&#xff0c;用于發送 HTTP 請求并處理 HTTP 響應。HttpClients 提供了多種方法來創建和配…

Maven版本統一管理

多模塊的項目&#xff0c;怎么方便管理 模塊的版本號呢&#xff1f; 可以使用 ${revision} 配合 flatten-maven-plugin插件 <plugin><groupId>org.codehaus.mojo</groupId><artifactId>flatten-maven-plugin</artifactId><version>1.1.0&…

時序數據庫 InfluxDB(一)

時序數據庫 InfluxDB&#xff08;一&#xff09; 數據庫種類有很多&#xff0c;比如傳統的關系型數據庫 RDBMS&#xff08; 如 MySQL &#xff09;&#xff0c;NoSQL 數據庫&#xff08; 如 MongoDB &#xff09;&#xff0c;Key-Value 類型&#xff08; 如 redis &#xff09…

E5071C數據保存教程:SNP文件/CSV導出+遠程傳輸步驟一鍵收藏

Keysight E5071C 網絡分析儀支持多種數據存儲方式&#xff0c;以下是詳細的操作步驟和注意事項&#xff1a; 1. 內部存儲&#xff08;儀器內存&#xff09; 保存測量數據&#xff1a; 軌跡數據&#xff1a;按 Save/Recall → Save Trace Data → 選擇存儲格式&#xff08;如 …

業務相關

目錄 一、Spark 1.spark主要用來計算什么&#xff1f; 隨便說段代碼 2.spark 運行命令說一個&#xff0c;平常用哪些參數&#xff0c;怎么考慮的 3.spark shuffle的代碼有哪些&#xff0c;平日哪些操作涉及到shuffle了 4.計算中遇到最難解決的是什么&#xff1f; 5.Spark …

LLM之RAG實戰(五十二)| 如何使用混合搜索優化RAG 檢索

在RAG項目中&#xff0c;大模型生成的參考內容&#xff08;專業術語稱為塊&#xff09;來自前一步的檢索&#xff0c;檢索的內容在很大程度上直接決定了生成的效果&#xff0c;因此檢索對于RAG項目至關重要&#xff0c;最常用的檢索方法是關鍵字搜索和語義搜索。本文將分別介紹…

[學成在線]07-視頻轉碼

視頻轉碼 視頻上傳成功后需要對視頻進行轉碼處理。 首先我們要分清文件格式和編碼格式&#xff1a; 文件格式&#xff1a;是指.mp4、.avi、.rmvb等這些不同擴展名的視頻文件的文件格式 &#xff0c;視頻文件的內容主要包括視頻和音頻&#xff0c;其文件格式是按照一定的編碼…

Leetcode算法方法總結

1. 雙指針法解決鏈表/數組題目 只要數組有序&#xff0c;就要想到雙指針做法。還有二分法 回文串一般也會用到雙指針&#xff0c;回文串的長度由于可能是奇數也可能是偶數&#xff0c;所以在尋找時&#xff0c;既需要尋找奇數長度的回文串&#xff0c;也需要尋找偶數長度的回文…

一周掌握Flutter開發--9. 與原生交互(上)

文章目錄 9. 與原生交互核心場景9.1 調用平臺功能&#xff1a;MethodChannel9.1.1 Flutter 端實現9.1.2 Android 端實現9.1.3 iOS 端實現9.1.4 使用場景 9.2 使用社區插件9.2.1 常用插件9.2.2 插件的優勢 總結 9. 與原生交互 Flutter 提供了強大的跨平臺開發能力&#xff0c;但…

基于Flask的通用登錄注冊模塊,并代理跳轉到目標網址

實現了用戶密碼的加密&#xff0c;代理跳轉到目標網址&#xff0c;不會暴露目標路徑&#xff0c;未登錄的情況下訪問proxy則自動跳轉到登錄頁&#xff0c;使用時需要修改配置項config&#xff0c;登錄注冊頁面背景快速修改&#xff0c;可以實現登錄注冊模塊的快速復用。 1.app…

Java課程設計(雙人對戰游戲)持續更新......

少廢話&#xff0c;當然借助了ai&#xff0c;就這么個實力&#xff0c;后續會逐漸完善...... 考慮添加以下功能&#xff1a; 選將&#xff0c;選圖&#xff0c;技能&#xff0c;天賦&#xff0c;道具&#xff0c;防反&#xff0c;反重力&#xff0c;物理反彈&#xff0c;擊落…

Ai工作流工具有那些如Dify、coze扣子等以及他們是否開源

Dify &#xff08;https://difycloud.com/&#xff09; 核心定位&#xff1a;專業級 LLM 應用開發平臺&#xff0c;支持復雜 AI 工作流構建與企業級管理。典型場景&#xff1a;企業智能客服、數據分析系統、復雜自動化流程構建等。適合需要深度定制、企業級管理和復雜 AI 邏輯…

Debezium系列之:使用Debezium和Apache Iceberg構建數據湖

Debezium系列之:使用Debezium和Apache Iceberg構建數據湖 Debezium Server Iceberg“Debezium Server Iceberg” 消費者設置數據復制Upsert 模式保留已刪除的記錄使用Upsert模式追加模式優化批處理大小在數據分析的世界中,數據湖是存儲和管理大量數據以滿足數據分析、報告或機…

docker run -p 5000:5000 my-flask-app

docker run -p 5000:5000 my-flask-app代碼的意思是&#xff1a; 運行 my-flask-app 容器&#xff0c;并把 Flask 服務器的 5000 端口映射到本機的 5000 端口。 拆解解釋 docker run -p 5000:5000 my-flask-app? docker run → 運行一個 Docker 容器 ? -p 5000:5000 → 端口…

高光譜工業相機+LED光源系統助力材料分類和異物檢測、實現高速在線檢測

檢測光源包括可見光&#xff0c;如紅光、藍光和綠光以及其他波長的光&#xff0c;如紫外和紅外波長&#xff0c;可以選擇與檢測對象物相應的波長。但由于能夠照射的波長較窄&#xff0c;例如受到同色異物混入或多個素材的材質分類等&#xff0c;可能需要使用可照射多種波長的光…

Spring 攔截器(Interceptor)與過濾器(Filter)對比

Spring 攔截器&#xff08;Interceptor&#xff09;與過濾器&#xff08;Filter&#xff09;對比 核心對比表格 對比維度攔截器&#xff08;Interceptor&#xff09;過濾器&#xff08;Filter&#xff09;定義Spring MVC 提供的組件&#xff0c;集成于 Spring 處理器鏈。Servl…