項目組對log和exception的討論結果。希望更多的人參與討論。
1 log
1.1 用log.error表示系統級錯誤
1.2 用log.warn表示應用級錯誤
1.3 服務初始化或結束用log.info
1.4 用log.debug替代out,debug要判斷isDebugEnable
1.5 用log.warn("",e)替代e.printstack
1.6 用log4e生成log相關代碼
1.7 Log信息要保證可讀性,需記錄現場信息,如當前處理id等
2 exception
2.1 try catch內的代碼不要太長
2.2 因為性能原因,try catch少放循環內
2.3 盡量避免catch(Exception)這樣的寫法
2.4 不同模塊定義不同的exception
2.5 建議創建應用的基類exception,特別是有定義error code需要的應用
2.6 只要catch就要log error message
2.7 catch并封裝成另一種exception,如果不nest原來的exception就要log stackTrace
2.8 持久層throw dataAccessException,業務層throw checked exception,展現層只顯示exception信息
2.9 規范的exception流程定義如下:
業務層不需處理的runtime exception,由展現層定義的exception controller捕獲,交給相應的error頁面顯示并記錄stack信息。業務層捕獲下層的exception,并封裝成業務層的checked exception,如果nest所捕獲的exception,則僅log error message,如果不nest就需要用log.warn(“”,e)記錄stack信息。展現層捕獲業務層的exception,應由處理業務層exception的error頁面來處理。