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

Spring Boot中日志管理與異常處理實踐指南

 更新時間:2025年06月26日 11:25:23   作者:白侖色  
本文系統(tǒng)化講解SpringBoot日志管理與異常處理,涵蓋Logback配置、分層異常處理、上下文記錄及ELK集成,強調日志分級、自定義異常設計,增強應用穩(wěn)定性與可維護性,感興趣的朋友跟隨小編一起看看吧

以下是Spring Boot中日志管理與異常處理的系統(tǒng)化實踐指南,結合最佳實踐與核心配置,確保應用健壯性與可維護性。

?? 一、日志管理核心配置

默認框架與級別控制

Logback 是Spring Boot默認日志框架,通過application.yml快速配置:

logging:
  level:
    root: INFO
    com.example.service: DEBUG  # 包級自定義級別
  file:
    name: logs/app.log         # 輸出到文件
  • 級別優(yōu)先級TRACE < DEBUG < INFO < WARN < ERROR < FATAL。

文件輸出與輪轉策略

  • 基礎配置logging.file.name指定路徑,logging.file.path設置目錄(默認生成spring.log)。

高級輪轉(通過logback-spring.xml):

<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <file>logs/app.log</file>
  <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
    <fileNamePattern>logs/archived/app-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
    <maxFileSize>500MB</maxFileSize>   <!-- 按大小切割 -->
    <maxHistory>30</maxHistory>        <!-- 保留30天 -->
  </rollingPolicy>
</appender>

支持按日期/大小歸檔,避免日志文件過大。

日志分組與環(huán)境適配

預定義分組:如web(Spring Web相關日志)、sql(數據庫操作日志)。

logging:
  group:
    sql: org.hibernate.SQL, org.springframework.jdbc
  level:
    sql: DEBUG
  • 環(huán)境區(qū)分:在logback-spring.xml中使用<springProfile>隔離開發(fā)/生產配置。

?? 二、全局異常處理機制

分層異常處理策略

分層異常處理規(guī)則
DAO層不捕獲異常,直接拋出(避免掩蓋底層問題)。
Service層拋出自定義BusinessException(繼承RuntimeException),確保事務回滾。
Controller層不處理異常,由全局處理器統(tǒng)一接管。

自定義異常設計

基類定義(支持錯誤碼與消息):

public class BusinessException extends RuntimeException {
    private final int code; // 業(yè)務錯誤碼
    public BusinessException(int code, String message) {
        super(message);
        this.code = code;
    }
}
  • 子類細化(如UserNotFoundException),增強可讀性。

全局異常處理器
使用@RestControllerAdvice統(tǒng)一捕獲并返回JSON錯誤信息:

@RestControllerAdvice
public class GlobalExceptionHandler {
    private static final Logger logger = LoggerFactory.getLogger(GlobalExceptionHandler.class);
    // 處理業(yè)務異常
    @ExceptionHandler(BusinessException.class)
    public ResponseEntity<ErrorResponse> handleBusinessException(BusinessException ex) {
        logger.warn("Business error: {}", ex.getMessage());  // WARN級別記錄
        return ResponseEntity.status(HttpStatus.BAD_REQUEST)
               .body(new ErrorResponse(ex.getCode(), ex.getMessage()));
    }
    // 處理未預期異常
    @ExceptionHandler(Exception.class)
    public ResponseEntity<ErrorResponse> handleUnexpectedException(Exception ex) {
        logger.error("System error: ", ex);  // ERROR級別記錄堆棧
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
               .body(new ErrorResponse(500, "Internal Server Error"));
    }
}

關鍵點:業(yè)務異常無需記錄堆棧(logger.warn),系統(tǒng)異常需完整日志(logger.error)。

??? 三、日志與異常結合的最佳實踐

上下文信息記錄

在異常處理器中捕獲請求詳情(如參數、URL):

@ExceptionHandler(Exception.class)
public ResponseEntity<String> handleException(Exception ex, WebRequest request) {
    logger.error("Request URL: {}, Error: {}", 
        request.getDescription(false), ex.getMessage(), ex);
    // ...
}

避免單純打印ex.getMessage(),需包含堆棧和請求數據。

日志級別與異常匹配

  • ERROR:未處理異常、系統(tǒng)級錯誤(如數據庫連接失?。?/li>
  • WARN:業(yè)務異常(如參數校驗失?。?。
  • DEBUG:開發(fā)期詳細流程跟蹤(生產環(huán)境關閉)。

占位符代替字符串拼接
使用{}提升性能與可讀性:

logger.debug("User id={} not found", userId);  // 正確?
logger.debug("User id=" + userId + " not found"); // 避免?

?? 四、生產環(huán)境增強策略

集中化日志收集

集成ELK(Elasticsearch + Logstash + Kibana)或Syslog,聚合多實例日志。

日志格式標準化(JSON格式便于解析):

<encoder class="net.logstash.logback.encoder.LogstashEncoder"/> <!-- 在logback中配置 -->

Dubbo等RPC框架異常處理

自定義ExceptionFilter放行自定義異常,避免被包裝為RuntimeException

public class CustomExceptionFilter extends ExceptionFilter {
    @Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) {
        Result result = invoker.invoke(invocation);
        if (result.getException() instanceof BusinessException) {
            return result; // 放行自定義異常
        }
        return super.invoke(invoker, invocation);
    }
}

通過META-INF/dubbo/com.alibaba.dubbo.rpc.Filter文件注冊過濾器。

健康檢查與監(jiān)控

通過Spring Boot Actuator暴露/health端點,結合日志分析系統(tǒng)(如Prometheus+Grafana)實時監(jiān)控錯誤率。

?? 總結:關鍵原則

  • 日志:按場景分級(開發(fā)用DEBUG,生產用INFO+ERROR),集中化管理。
  • 異常:早拋出(Service層)、晚捕獲(全局處理器),區(qū)分業(yè)務異常與系統(tǒng)錯誤。
  • 工具鏈logback-spring.xml定制日志策略,@RestControllerAdvice統(tǒng)一異常響應。

到此這篇關于Spring Boot中日志管理與異常處理的文章就介紹到這了,更多相關Spring Boot日志管理與異常處理內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • RequestContextHolder.getRequestAttributes()空指針問題及解決

    RequestContextHolder.getRequestAttributes()空指針問題及解決

    這篇文章主要介紹了RequestContextHolder.getRequestAttributes()空指針問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • java檢查服務器的連通兩種方法代碼分享

    java檢查服務器的連通兩種方法代碼分享

    這篇文章主要介紹了java檢查服務器的連通兩種方法代碼分享,涉及ping的介紹以及檢查服務器連通的兩種方法代碼示例,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Java使用PDFBox提取PDF文本并統(tǒng)計關鍵詞出現(xiàn)的次數

    Java使用PDFBox提取PDF文本并統(tǒng)計關鍵詞出現(xiàn)的次數

    這篇文章主要介紹了Apache PDFBox庫的基本知識,包括如何使用PDDocument加載PDF文件、PDFTextStripper提取文本以及如何進行詞頻統(tǒng)計,還提供了在線URL的處理方法,需要的朋友可以參考下
    2025-05-05
  • Mybatis對MySQL if 函數的不支持問題解讀

    Mybatis對MySQL if 函數的不支持問題解讀

    接手項目后,為了實現(xiàn)多租戶功能,引入了Mybatis-plus,發(fā)現(xiàn)之前運行正常的SQL語句報錯,原因是Mybatis不支持MySQL的if函數,通過查詢資料,將SQL中的if函數替換為case語句,解決了問題
    2025-12-12
  • 詳解使用Maven開發(fā)Web應用詳細步驟

    詳解使用Maven開發(fā)Web應用詳細步驟

    這篇文章主要介紹了詳解使用Maven開發(fā)Web應用詳細步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • Java多線程的臨界資源問題解決方案

    Java多線程的臨界資源問題解決方案

    這篇文章主要介紹了Java多線程的臨界資源問題解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • Java日常練習題,每天進步一點點(23)

    Java日常練習題,每天進步一點點(23)

    下面小編就為大家?guī)硪黄狫ava基礎的幾道練習題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • Java實現(xiàn)快速并查集

    Java實現(xiàn)快速并查集

    這篇文章主要為大家詳細介紹了Java實現(xiàn)快速并查集,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • 啟動SpringBoot報JavaMail加載錯誤的原因分析和解決

    啟動SpringBoot報JavaMail加載錯誤的原因分析和解決

    這篇文章給大家介紹了啟動SpringBoot報JavaMail加載錯誤的原因分析和解決,文中通過代碼示例給出了詳細的原因分析和解決方法,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • 使用位運算、值交換等方式反轉java字符串的多種方法(四種方法)

    使用位運算、值交換等方式反轉java字符串的多種方法(四種方法)

    這篇文章主要介紹了使用位運算、值交換等方式反轉java字符串,本文通過四種方式給大家講解,給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07

最新評論

建水县| 蒲江县| 崇州市| 怀化市| 阿图什市| 伊宁县| 兴化市| 新乡市| 东平县| 临沂市| 纳雍县| 雅安市| 荆门市| 汝南县| 德格县| 南华县| 阿图什市| 江永县| 澄迈县| 修武县| 海丰县| 花垣县| 吉安县| 社旗县| 土默特左旗| 项城市| 盱眙县| 博客| 通渭县| 商丘市| 屏东县| 清苑县| 武穴市| 康平县| 兰溪市| 黔西县| 高碑店市| 连州市| 沙坪坝区| 昌江| 恩平市|