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

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

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

以下是Spring Boot中日志管理與異常處理的系統(tǒng)化實踐指南,結(jié)合最佳實踐與核心配置,確保應(yī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。

文件輸出與輪轉(zhuǎn)策略

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

高級輪轉(zhuǎn)(通過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)境適配

預(yù)定義分組:如web(Spring Web相關(guān)日志)、sql(數(shù)據(jù)庫操作日志)。

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

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

分層異常處理策略

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

自定義異常設(shè)計

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

public class BusinessException extends RuntimeException {
    private final int code; // 業(yè)務(wù)錯誤碼
    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è)務(wù)異常
    @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()));
    }
    // 處理未預(yù)期異常
    @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"));
    }
}

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

??? 三、日志與異常結(jié)合的最佳實踐

上下文信息記錄

在異常處理器中捕獲請求詳情(如參數(shù)、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(),需包含堆棧和請求數(shù)據(jù)。

日志級別與異常匹配

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

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

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

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

集中化日志收集

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

日志格式標(biāo)準(zhǔn)化(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端點,結(jié)合日志分析系統(tǒng)(如Prometheus+Grafana)實時監(jiān)控錯誤率。

?? 總結(jié):關(guān)鍵原則

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

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

相關(guān)文章

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

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

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

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

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

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

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

    Mybatis對MySQL if 函數(shù)的不支持問題解讀

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評論

石棉县| 安乡县| 泌阳县| 吉水县| 洪湖市| 绵阳市| 长寿区| 永福县| 长垣县| 固镇县| 文成县| 文安县| 安多县| 吴川市| 德州市| 张家界市| 玉屏| 鄂尔多斯市| 东港市| 航空| 四川省| 东乡县| 琼中| 即墨市| 清水河县| 蒙自县| 霍邱县| 福海县| 贵港市| 塘沽区| 新田县| 巍山| 随州市| 安庆市| 呈贡县| 宁明县| 秀山| 北宁市| 郑州市| 弥渡县| 贡山|