閒話不多說,繼續優化 全域性統一Restful API 響應框架 做到專案通用 介面可延伸。
如果沒有看前面幾篇文章請先看前面幾篇
SpringBoot定義優雅全域性統一Restful API 響應框架
SpringBoot定義優雅全域性統一Restful API 響應框架二
SpringBoot定義優雅全域性統一Restful API 響應框架三
SpringBoot定義優雅全域性統一Restful API 響應框架四
這裡解決上一篇留下問題 如何實現介面錯誤國際化。 還有上一篇錯誤提示也不是很友好
我們可以在進一步抽象出通用異常介面。
異常資訊應由固定異常編碼資訊加上詳細的錯誤自定義資訊。
上一篇最後錯誤 提示依然不夠友好具體。我們可以在具體到哪個欄位
還有未知錯誤返回異常,這裡之前提到要在·全域性例外處理中接入自己的紀錄檔輸出處理,我們只是單純的列印在控制檯。肯定是不行
如果專案中不做任何處理預設就會走Tomcat伺服器紀錄檔處理邏輯,輸出到
catalina 檔案中 我們這裡把這個問題處理一下。
自定義異常類繼承執行時異常。自定義錯誤編碼,和錯誤資訊列舉
/**
* @author 公眾號 程式設計師三時
* @version 1.0
* @date 2023/4/29 00:15
* @webSite https://github.com/coder-amiao
* 通用業務異常封裝
*/
@Data
public class BusinessException extends RuntimeException {
/**
* 自定義異常編碼
*/
private String code;
public BusinessException(String code, String message) {
super(message);
this.code = code;
}
public BusinessException(ResultCode resultCodeEnum) {
super(resultCodeEnum.getMessage());
this.code = resultCodeEnum.getCode();
}
public BusinessException(ResultCode resultCodeEnum, String msg) {
super(resultCodeEnum.getMessage() +" " +msg);
this.code = resultCodeEnum.getCode();
}
}
其他異常類也是如此
這裡主要說一下如何把錯誤紀錄檔輸出到指定伺服器路徑的指定log檔案
紀錄檔檔案按照型別和時間劃分,一天一個按照指定大小
這樣就方便自己查詢錯誤紀錄檔
logback-spring.xml springboot約定設定名稱,可以讀取載入屬性檔案
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<contextName>shop-api</contextName>
<!--定義紀錄檔檔案的儲存地址 從springboot組態檔中獲取路徑-->
<springProperty scope="context" name="LOG_PATH" source="logging.file.path"/>
<!--springboot組態檔中獲取紀錄檔級別-->
<springProperty scope="context" name="LOG_LEVEL" source="logging.level.root"/>
<!-- <property name="log.path" value="log" />-->
<property name="log.maxHistory" value="90" />
<property name="log.colorPattern" value="%magenta(%d{yyyy-MM-dd HH:mm:ss}) %highlight(%-5level) %yellow(%thread) %green(%logger) %msg%n"/>
<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5level %thread %logger %msg%n"/>
<!--輸出到控制檯-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.colorPattern}</pattern>
</encoder>
</appender>
<!--輸出到檔案-->
<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/info/info.%d{yyyy-MM-dd}-%i.log</fileNamePattern>
<maxFileSize>3MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}/error/error.%d{yyyy-MM-dd}-%i.log</fileNamePattern>
<maxFileSize>3MB</maxFileSize>
<maxHistory>30</maxHistory>
<totalSizeCap>1GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<root level="debug">
<appender-ref ref="console" />
</root>
<root level="info">
<appender-ref ref="file_info" />
<appender-ref ref="file_error" />
</root>
</configuration>
代理已經更新到 github倉庫腳手架專案
關注公眾號,程式設計師三時 持續輸出優質內容 希望給你帶來一點啟發和幫助