欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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(數(shù)據(jù)庫操作日志)。

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)。

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

上下文信息記錄

在異常處理器中捕獲請求詳情(如參數(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ù)庫連接失?。?/li>
  • WARN:業(yè)務異常(如參數(shù)校驗失?。?。
  • 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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 接口重試的7種常用方案詳細介紹

    接口重試的7種常用方案詳細介紹

    這篇文章主要為大家詳細介紹了接口重試的7種常用方案,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以根據(jù)需求選擇
    2025-03-03
  • Spring Boot Shiro在Web應用中的作用詳解

    Spring Boot Shiro在Web應用中的作用詳解

    這篇文章主要為大家介紹了Spring Boot Shiro在Web應用中的作用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • java代碼mqtt接收發(fā)送消息方式

    java代碼mqtt接收發(fā)送消息方式

    這篇文章主要介紹了java代碼mqtt接收發(fā)送消息方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • SpringCloud Netfilx Ribbon負載均衡工具使用方法介紹

    SpringCloud Netfilx Ribbon負載均衡工具使用方法介紹

    Ribbon是Netflix的組件之一,負責注冊中心的負載均衡,有助于控制HTTP和TCP客戶端行為。Spring Cloud Netflix Ribbon一般配合Ribbon進行使用,利用在Eureka中讀取的服務信息,在調用服務節(jié)點時合理進行負載
    2022-12-12
  • 使用java代碼代替xml實現(xiàn)SSM教程

    使用java代碼代替xml實現(xiàn)SSM教程

    這篇文章主要介紹了使用java代碼代替xml實現(xiàn)SSM教程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • springboot網(wǎng)站應用使用第三方qq登錄的實現(xiàn)過程

    springboot網(wǎng)站應用使用第三方qq登錄的實現(xiàn)過程

    這篇文章主要介紹了springboot網(wǎng)站應用使用第三方qq登錄,本文通過實例圖文相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Java中數(shù)組的定義和使用教程(二)

    Java中數(shù)組的定義和使用教程(二)

    這篇文章主要給大家介紹了關于Java中數(shù)組的定義和使用的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • windows下java環(huán)境變量的設置方法

    windows下java環(huán)境變量的設置方法

    在“系統(tǒng)變量”中,設置3項屬性,JAVA_HOME,PATH,CLASSPATH(大小寫無所謂),若已存在則點擊“編輯”,不存在則點擊“新建”
    2013-09-09
  • SpringBoot中的@Configuration注解詳解

    SpringBoot中的@Configuration注解詳解

    這篇文章主要介紹了SpringBoot中的@Configuration注解詳解,Spring Boot推薦使用JAVA配置來完全代替XML 配置,JAVA配置就是通過 @Configuration和 @Bean兩個注解實現(xiàn)的,需要的朋友可以參考下
    2023-08-08
  • javaWeb使用驗證碼實現(xiàn)簡單登錄

    javaWeb使用驗證碼實現(xiàn)簡單登錄

    這篇文章主要為大家詳細介紹了javaWeb使用驗證碼實現(xiàn)簡單登錄,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08

最新評論