在spring boot中使用Logback

在 Spring Boot 中使用 Logback 作為日志框架是開發中的常見需求,因其高性能和靈活配置而廣受青睞。以下是詳細實踐指南,結合了配置方法、代碼示例及最佳實踐:


🔧 一、依賴配置

Spring Boot 默認集成了 Logback,無需手動添加依賴:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId> <!-- 默認包含 logging 模塊 -->
</dependency>

若需切換至 Log4j2,需排除默認日志依賴并引入 Log4j2:

更多配置細節可參考:Spring Boot 日志系統配置(上)、Logback 配置文件詳解。

<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>spring-boot-starter-log4j2</artifactId>
</dependency>

?? 二、配置方式

1. 基礎配置(application.yml/properties)

適用于簡單場景,如設置日志級別和輸出路徑:

logging:level:root: INFOcom.example.service: DEBUG  # 包級自定義日志級別file:name: logs/app.log         # 指定日志文件路徑pattern:console: "%d{yyyy-MM-dd} [%thread] %-5level %logger{36} - %msg%n"
  • 注意logging.file.namelogging.file.path 不可同時使用。
2. 高級配置(logback-spring.xml)

創建 src/main/resources/logback-spring.xml,支持復雜策略如滾動日志、環境隔離:

<configuration><!-- 動態讀取 Spring 應用名 --><springProperty name="app.name" source="spring.application.name" default="app"/><property name="LOG_PATH" value="./logs/${app.name}"/><!-- 控制臺輸出 --><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %highlight(%-5level) %cyan(%logger{36}) - %msg%n</pattern></encoder></appender><!-- 按天滾動日志文件 --><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_PATH}/app.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${LOG_PATH}/app-%d{yyyy-MM-dd}.%i.log</fileNamePattern><maxHistory>30</maxHistory> <!-- 保留30天 --><maxFileSize>10MB</maxFileSize> <!-- 單文件最大10MB --></rollingPolicy><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><!-- 環境隔離配置 --><springProfile name="dev"><root level="DEBUG"> <!-- 開發環境啟用DEBUG --><appender-ref ref="CONSOLE"/><appender-ref ref="FILE"/></root></springProfile><springProfile name="prod"><root level="INFO"> <!-- 生產環境僅INFO及以上 --><appender-ref ref="FILE"/></root></springProfile>
</configuration>
  • 關鍵特性
    ? 動態屬性<springProperty> 讀取 Spring 配置
    ? 環境隔離<springProfile> 按環境(dev/prod)切換配置
    ? 滾動策略:避免日志文件過大(按時間/大小分割)

💻 三、代碼中使用日志

通過 SLF4J 接口記錄日志,避免直接依賴 Logback:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;@RestController
public class UserController {private static final Logger logger = LoggerFactory.getLogger(UserController.class);@GetMapping("/users")public List<User> getUsers() {logger.debug("查詢用戶列表開始"); // DEBUG級別僅在開發環境輸出logger.info("請求處理中...");try {// 業務邏輯} catch (Exception e) {logger.error("用戶查詢失敗", e); // 記錄異常堆棧}return userList;}
}
  • 最佳實踐
    🔹 使用 {} 占位符避免字符串拼接開銷:logger.info("用戶ID: {}", userId);
    🔹 異常日志需傳遞異常對象:logger.error("錯誤描述", exception)

🚀 四、高級特性

  1. 異步日志
    提升性能,減少 I/O 阻塞:

    <appender name="ASYNC_FILE" class="ch.qos.logback.classic.AsyncAppender"><queueSize>500</queueSize> <!-- 隊列容量 --><discardingThreshold>0</discardingThreshold> <!-- 不丟棄日志 --><appender-ref ref="FILE"/>
    </appender>
    
  2. MDC(診斷上下文)
    添加請求 ID 實現鏈路追蹤:

    MDC.put("requestId", UUID.randomUUID().toString());
    logger.info("訂單創建");
    MDC.remove("requestId");
    

    配置 logback-spring.xml 輸出 MDC 值:

    <pattern>%d{yyyy-MM-dd} [%X{requestId}] %msg%n</pattern>
    
  3. 敏感信息脫敏
    自定義轉換器屏蔽敏感數據(如手機號、密碼)。


?? 五、常見問題解決

問題原因與解決方案
日志文件未生成檢查路徑權限或配置沖突(logging.file.name vs logging.file.path
日志級別不生效確保配置文件中無沖突的 <logger> 定義,或檢查依賴沖突(如多個日志框架共存)
配置變更未加載開啟熱更新:<configuration scan="true" scanPeriod="30 seconds">
生產環境日志過大啟用滾動策略 + 異步寫入,定期清理歷史日志(maxHistory

💎 最佳實踐總結

  1. 配置規范:優先用 logback-spring.xml(非 logback.xml)以支持 Spring 擴展;
  2. 環境適配:開發環境輸出到控制臺 + DEBUG 級別,生產環境僅文件輸出 + INFO 級別;
  3. 性能優化:生產環境啟用異步日志與滾動壓縮策略;
  4. 日志治理:敏感信息脫敏、定期清理舊日志(maxHistory)、監控日志文件大小。

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

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

相關文章

騰訊云 Lighthouse 輕量應用服務器:數據驅動的架構選型指南

摘要&#xff1a;騰訊云 Lighthouse 作為面向輕量級應用場景的優化解決方案&#xff0c;通過高性價比套餐式售賣、開箱即用應用模板及流量包計費模式&#xff0c;顯著降低中小企業與開發者的上云門檻。本文基于性能測試與橫向對比&#xff0c;量化分析其核心優勢與適用邊界。 …

Linux TCP/IP協議棧中的TCP輸入處理:net/ipv4/tcp_input.c解析

在網絡通信領域,TCP(傳輸控制協議)因其可靠的面向連接特性而被廣泛應用。Linux內核的TCP/IP協議棧實現了對TCP協議的高效處理,其中net/ipv4/tcp_input.c文件扮演著關鍵角色,負責處理TCP數據包的輸入邏輯。下面是對該文件核心功能的深入剖析。 一、TCP數據包接收與處理 (…

物聯網傳輸網關、RTU、DTU及SCADA系統技術解析

目錄 摘要 一、引言 二、物聯網傳輸網關 1. 定義 2. 類型 3. 分類 4. 工作原理 5. 差異分析 總結&#xff1a; 三、RTU&#xff08;遠程終端單元&#xff09; 1. 定義 2. 工作原理 3. 特點 4. 應用場景 四、DTU&#xff08;數據傳輸單元&#xff09; 1. 定義 …

【unity游戲開發——熱更新】YooAsset簡化資源加載、打包、更新等流程

注意&#xff1a;考慮到熱更新的內容比較多&#xff0c;我將熱更新的內容分開&#xff0c;并全部整合放在【unity游戲開發——熱更新】專欄里&#xff0c;感興趣的小伙伴可以前往逐一查看學習。 文章目錄 前言1、什么是YooAsset&#xff1f;2、系統需求3、系統特點 一、下載安裝…

AWS RDS/Aurora 開啟 Database Insights 高級模式全攻略

想要深入了解數據庫性能問題?AWS Database Insights 高級模式為您提供強大的性能分析工具。本文詳細對比標準模式與高級模式的功能差異,并提供完整的啟用指南和實戰測試結果。 一、Database Insights 模式對比 AWS CloudWatch Database Insights 提供兩種模式:標準模式和高…

XML SimpleXML

XML SimpleXML 引言 XML&#xff08;可擴展標記語言&#xff09;是一種用于存儲和傳輸數據的標記語言&#xff0c;它被廣泛應用于Web服務和數據交換。SimpleXML是PHP中一個處理XML數據非常便捷的庫。本文將詳細介紹SimpleXML庫的基本用法&#xff0c;幫助讀者快速掌握XML數據…

Docker簡單介紹與使用以及下載對應鏡像(項目前置)

DockerDocker安裝Docker卸載Docker配置鏡像源配置鏡像加速 Docker服務命令1.鏡像操作命令2.容器操作命令 安裝Mysql**數據卷掛載** Docker 在linux中軟件安裝說起: 以前在linux中安裝軟件,是直接安裝在linux操作系統中,軟件和操作系統耦合度很高,不方便管理. 因為linux版本不…

MyBatis 簡介

MyBatis 簡介 MyBatis 是一款優秀的持久層框架&#xff0c;它支持定制化 SQL、存儲過程以及高級映射&#xff0c;能夠幫助開發者將 Java 對象與數據庫表進行靈活映射&#xff0c;簡化數據持久化操作。以下從多個維度詳細介紹 MyBatis&#xff1a; 一、核心定位與優勢 輕量級…

自監督學習在合成孔徑聲吶目標識別中的應用之論文閱讀

自監督學習在合成孔徑聲吶目標識別中的應用 BW Sheffield 美國巴拿馬城海軍水面作戰中心 1 引言 在自主水下航行器(AUVs)中應用計算機視覺面臨著獨特的挑戰,因為海洋環境往往條件不可預測且極為嚴苛。傳統計算機視覺研究主要依賴光學相機成像,而在光照不足、懸浮沉積物及水…

進程間通信2(命名管道)linux

1 命名管道 前面講到匿名管道&#xff0c;有一個很大的限制&#xff0c;那就是只有具有相同祖先&#xff08;具有親緣關系&#xff09;的進程間才能進行通信&#xff0c;但是如果想實現不同進程間的通信&#xff0c;這個時候命名管道就發揮著巨大作用。 命名管道是一種特殊類…

簡單通過SenseVoice給自己配置一個語音轉文字服務

首先把代碼下載下來 gitgithub.com:FunAudioLLM/SenseVoice.git 然后寫一個docker文件 FROM ubuntu:latestRUN apt-get update -y RUN apt-get install -y python3-full python3-pip RUN mkdir -p /SenseVoice WORKDIR /SenseVoice RUN python3 -m venv . ENV USE_CUDA0 EXP…

網絡釣魚攻擊

?根據2023年Proofpoint年度網絡釣魚報告顯示&#xff1a;91%的針對性攻擊始于釣魚郵件&#xff0c;平均每30秒就有一個企業成為攻擊目標&#xff0c;全球損失超過$6.5B? 一、釣魚攻擊技術深度解析 1. 釣魚攻擊核心技術架構 2. 現代釣魚技術演進 ?攻擊向量升級路線? ?當前…

uvicorn api:app --host 0.0.0.0 --port 7777容器運行失敗

docker logs pycorrector-container-gpu 你這個報錯的核心是&#xff1a; ERROR: Error loading ASGI app, Could not import module "api".這說明&#xff1a; uvicorn api:app 沒有找到 api.py 文件&#xff0c;或者沒法導入 app 對象。 &#x1f50d; 一步步排查…

熱成像儀測MOSFET溫度

熱成像儀測MOSFET溫度 根據提供的搜索結果&#xff0c;熱測量方法主要分為非接觸式和接觸式兩大類&#xff0c;針對不同材料特性和測量場景各有優勢。以下是核心方法的總結及關鍵技術要點&#xff1a; &#x1f525; 一、非接觸式熱測量方法 紅外熱成像技術 原理&#xff1a;通…

Dagster資產元數據與標簽:數據治理的利器

在現代數據棧中&#xff0c;有效的數據治理至關重要。Dagster作為領先的數據編排平臺&#xff0c;提供了強大的資產元數據和標簽功能&#xff0c;幫助團隊更好地理解、組織和跟蹤數據資產。本文將深入探討Dagster中的資產元數據和標簽功能&#xff0c;展示如何利用這些功能提升…

基于物聯網的智能飲水機系統設計

標題:基于物聯網的智能飲水機系統設計 內容:1.摘要 隨著物聯網技術的快速發展&#xff0c;智能設備在日常生活中的應用越來越廣泛。本研究的目的是設計一種基于物聯網的智能飲水機系統&#xff0c;以提高飲水機的使用便捷性和智能化程度。方法上&#xff0c;通過傳感器實時監測…

DP讀書:NEC年終小結和顯示器【明基rd28u】

一點真實體驗_寫在ROBOCON2025國賽前 很久沒有寫這種關于感受的博客了&#xff0c;就用真實感受的角度來看看一次眾測的經歷&#xff0c;哈哈^ 差不多一個月前&#xff0c;我收到了明基的28寸顯示器&#xff0c;體驗了差不多2周左右&#xff0c;一直把顯示器掛在實驗室倉庫La…

Solana 一鍵冷分倉機制詳解:如何用技術手段構建健康的持倉結構

在 Solana 的快速發幣環境中&#xff0c;許多項目方在成功部署代幣后&#xff0c;會面臨一個共通問題——如何避免持倉結構過于集中。無論是初始鑄造的 Token、流動性預留份額&#xff0c;還是空投分發的準備金&#xff0c;如果長時間停留在單一錢包地址中&#xff0c;將在鏈上…

【智能體】dify部署本地步驟

從git克隆倉庫到本地 git clone https://github.com/langgenius/dify.git設置環境變量 cd dify cd docker cp .env.example .envdocker啟動 docker compose up -d在瀏覽器打開網址 http://localhost/install 登錄后即可使用

開源鴻蒙6.0 Beta1版本發布!深圳觸覺智能即將適配RK3566/RK3568/RK3576/RK3588等芯片

開放原子開源鴻蒙&#xff08;OpenAtom OpenHarmony&#xff0c;簡稱“開源鴻蒙”或“OpenHarmony”&#xff09;6.0 Beta1版本正式發布。相比5.1.0 Release版本進一步增強ArkUI組件能力&#xff0c;提供更安全、更靈活的組件布局&#xff1b;增強分布式數據管理能力&#xff0…