一 什么是異常報(bào)告器
收集錯(cuò)誤信息,用于向用戶報(bào)告錯(cuò)誤原因侵状。
二 異常報(bào)告器的作用
1 程序運(yùn)行失敗的時(shí)候會在控制臺或者日志上打印出一個(gè)具體的錯(cuò)誤報(bào)告试和,以方便排查問題店读。
三 異常報(bào)告器源碼分析
1 在SpringApplication構(gòu)造函數(shù)中調(diào)用setInitializers,加載spring.factories文件峭弟,把FailAnalyzed子類全限定名封裝進(jìn)List集合中附鸽。
2 在run函數(shù)中,創(chuàng)建FailureAnalyzed實(shí)例瞒瘸,在構(gòu)造函數(shù)中坷备,在緩存中獲取FailureAnalyzed子類全限定名存于List集合中,接著循環(huán)集合使用反射創(chuàng)建FailureAnalyzed子類實(shí)例并存于List集合中情臭。
3 當(dāng)run函數(shù)中有異常拋出則執(zhí)行handleRunFailure函數(shù)省撑,循環(huán)執(zhí)行l(wèi)isteners.finished(context, exception);發(fā)送事件(ApplicationFailed事件),在廣播器實(shí)例函數(shù)multicastEvent循環(huán)取出監(jiān)聽器實(shí)例并檢驗(yàn)事件(ApplicationFailed)是否屬于監(jiān)聽器俯在,成立則調(diào)用函數(shù)處理竟秫。
取出監(jiān)聽器完成
廣播器廣播事件(ApplicationFailed)
監(jiān)聽器處理事件(ApplicationFailed)
4 執(zhí)行reportFailure 函數(shù),循環(huán)取出FailureAnalyzed子類實(shí)例跷乐,判斷異常是否屬于某個(gè)Class實(shí)例屬于則返回FailureAnalyzed子類實(shí)例肥败, 再通過FailureAnalyzedReport實(shí)例輸出FailureAnalyzed異常信息。
獲取異常對應(yīng)的FailureAnalyzed
查找異常對應(yīng)的FailureAnalysis實(shí)例
異常報(bào)告器輸出異常信息
異常信息格式化構(gòu)建輸出