簡體   English   中英

Java中的微服務中的日志記錄和異常處理

[英]Logging and Exception handling in a micro-service in Java

我正在研究一個微服務,它根據存儲在自己的數據存儲中的某些配置進行一些計算。 計算apis通過REST API存儲。 該應用程序是一個Spring啟動應用程序。 現在應用程序中主要有3層:

  1. REST控制器
  2. 服務層
  3. DAO層 - 它使用了彈簧數據。

我打算使用以下幾點處理日志記錄和異常處理:

  • 記錄服務接收和響應的每個請求,或者如果狀態不是2xx系列,則至少記錄響應。

  • 如果DAO層或服務層中存在任何已檢查的異常,則記錄它們並拋出從RuntimeException派生的自定義異常。

  • 有幾個自定義異常應該從Service層拋出,主要是遇到無效值,空值等情況。

  • 在REST控制器中嘗試catch塊並記錄異常即消息以及stacktrace並相應地返回響應。

因此,總的想法是讓RuntimeExceptions一直傳播到REST控制器,在那里應該記錄它們,因此應該發送響應。 包含已檢查的異常會以相同的方法記錄它們,而是拋出自定義異常。

請建議在此類應用程序中記錄異常的正確或良好方法。

僅選擇一個位置來記錄例外。

在您的設計中,如果DAO中發生異常,它將:

  • 登錄DAO
  • 然后觸發運行時異常,該異常將被捕獲並記錄在控制器中
  • 然后應該通過REST返回非2xx響應狀態,這將觸發根據您的第一點記錄響應

因此,您將在三個位置獲得相同的信息,或者您將獲得有關分散在日志中兩個或三個位置的單個錯誤的不同信息。

選擇一個位置來記錄錯誤,並確保在該位置存在所有相關信息(即將底層DAO異常設置為運行時異常的原因,並且不要忘記記錄運行時異常及其原因) 。

編寫控制器建議 ,它將捕獲所有異常並記錄所需內容。 你可以在這里捕捉例外。 我實現了你在這里問的相同內容。

*/
/**
 * Uncaught exception handler
 * @param e - Exception
 */
@ExceptionHandler(Exception.class)
@ResponseStatus(code=HttpStatus.INTERNAL_SERVER_ERROR)
@ResponseBody
public void handleError(Exception e,HttpServletRequest request, HttpServletResponse response){
    logger.error("Exception occured : {}",e);
        //logs request & response here
}

另請檢查此處描述的AbstractRequestLoggingFilter

對於所有自定義應用程序特定的exeptions創建自己的自定義異常類型,並在上面的代碼塊中指定的@ExceptionHandler的幫助下處理它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM