業務代碼報錯卻無日志記錄,是什么原因導致的?

業務代碼報錯卻無日志記錄,是什么原因導致的?

業務代碼異常排查:日志缺失之謎

本文分析一段代碼,該代碼使用雙層try-catch塊處理異常,但內層try-catch塊捕獲的異常信息卻未記錄到日志中。

代碼片段如下:

try {     List<Plan> plans = planService.lambdaQuery()             .eq(Plan::getYn, YnEnum.YES.getLabel())             .eq(Plan::getStatus, Plan.Status.DONE.getCode())             .isNotNull(Plan::getPId)             .list();     List<List<Plan>> partition = Lists.partition(plans, 5);     partition.forEach(planList -> {         try {             //業務代碼1.....         } catch (Exception exception) {             log.Error("報錯信息1:", exception);         }     }); } catch (Exception exception) {     log.error("報錯信息2:", exception); } finally {     log.info("釋放requestId[{}]的鎖", requestId);     Redis.unlock(Module.REFRESH_PROMOTE, workerLockKey, requestId); }

代碼邏輯上,“業務代碼1”發生異常,內層catch塊應捕獲并記錄“報錯信息1”。然而,日志中缺失該信息,問題并非代碼邏輯錯誤,而是日志記錄機制問題。

可能原因及排查步驟:

  1. 日志級別設置: 檢查日志配置,確保日志級別允許記錄log.error級別的信息。如果日志級別設置為warn或info,則log.error級別的日志將被忽略。

  2. 日志輸出目標: 驗證日志輸出目標的正確性。確認日志文件路徑是否存在、數據庫連接是否正常,以及日志是否正確輸出到指定位置。

  3. 日志系統故障: 排查日志系統本身是否存在故障,例如磁盤空間不足、日志文件已滿、日志系統服務異常等。

  4. 異常類型及處理: 仔細檢查“業務代碼1”,確定是否真的拋出了Exception。某些異常可能被業務代碼1內部消化,并未真正拋出。 檢查異常類型,并打印異常的信息,以便更準確地定位問題。

  5. log 對象: 確認log對象是否正確初始化并配置。

通過以上步驟,系統地排查日志記錄機制和“業務代碼1”的異常處理,即可找到日志缺失的原因,并解決問題。 如果問題仍然存在,請提供“業務代碼1”的具體內容以便進一步分析。

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享