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

Spring Boot中日志管理與異常處理實(shí)踐指南

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

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

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

默認(rèn)框架與級(jí)別控制

Logback 是Spring Boot默認(rèn)日志框架,通過(guò)application.yml快速配置:

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

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

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

高級(jí)輪轉(zhuǎn)(通過(guò)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>

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

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

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

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

?? 二、全局異常處理機(jī)制

分層異常處理策略

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

自定義異常設(shè)計(jì)

基類(lèi)定義(支持錯(cuò)誤碼與消息):

public class BusinessException extends RuntimeException {
    private final int code; // 業(yè)務(wù)錯(cuò)誤碼
    public BusinessException(int code, String message) {
        super(message);
        this.code = code;
    }
}
  • 子類(lèi)細(xì)化(如UserNotFoundException),增強(qiáng)可讀性。

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

@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級(jí)別記錄
        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級(jí)別記錄堆棧
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
               .body(new ErrorResponse(500, "Internal Server Error"));
    }
}

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

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

上下文信息記錄

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

日志級(jí)別與異常匹配

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

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

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

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

集中化日志收集

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

日志格式標(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);
    }
}

通過(guò)META-INF/dubbo/com.alibaba.dubbo.rpc.Filter文件注冊(cè)過(guò)濾器。

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

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

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

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

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

相關(guān)文章

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

    接口重試的7種常用方案詳細(xì)介紹

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

    Spring Boot Shiro在Web應(yīng)用中的作用詳解

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

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

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

    SpringCloud Netfilx Ribbon負(fù)載均衡工具使用方法介紹

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

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

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

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

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

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

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

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

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

    SpringBoot中的@Configuration注解詳解

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

    javaWeb使用驗(yàn)證碼實(shí)現(xiàn)簡(jiǎn)單登錄

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

最新評(píng)論