1.寫日誌的BugFree思路
一下三條tips是根據項目提煉了的經驗總結。主要提供一種BugFree的思路
1.寫日誌時要養成的好習慣
- 保證在定位日誌時可以離開代碼情鏡還能看懂問題是什麼。
- 在方法前加 @Transactional,拋出異常之後,事務會自動回滾,數據不會插入到數據庫。
- 規範打印日誌的格式
其中最重要的是接口和關鍵字,用於追蹤定位
log.warn(String.format("[接口名或操作名][Key Msg]:%s happens.because[param],[solve clue]",errorObj));
以上兩點的代碼舉例:
@Transactional(value = "transactionManager", rollbackFor=Exception.class)
public Boolean addLog(Request request) throws Exception {
Boolean result = false;
if(null!=request){
Result<LogDO> LogDOResult =Manager.getLogById(request.getId());
logger.info("add request num is"+ request.getId());
} //要指出正確或異常的數據ID,方便定位
else{
logger.error("查詢addLog接口信息失敗,[Id=" + Id + "]");
throw new Exception("不存在數據,ID:"+request.getId());
}
return result;
}
2.定位錯誤日誌時,主要用時間和內容關鍵字來定位錯誤信息,而requestId不具有描述性
在log的配置文件裏添加相關業務的log文件名,便於統一管理。
從上圖可知,當預約業務有問題則可以去xshell中找appointreg.log,具體方式如下圖:
整個背景流程大概是這樣:
2.錯誤排查工具Arthas
Arthas 是Alibaba開源的Java診斷工具。支持Linux/Mac/Windows,採用命令行交互模式。
它可以在線排查問題,無需重啓;動態跟蹤Java代碼;實時監控JVM狀態。
下面是資源和教程:
阿里巴巴Java診斷工具Arthas
Arthas中文教程
關於具體使用的源碼和步驟請見我的另一篇博客:
Java性能監控工具Arthas實踐