相信大家茬頊目仲苚菂日誌記彔都是基於AOP的方式吧。偶也是,用了spring提供的基於AspectJ的切面來完成的日誌記錄。但是日誌記錄的信息除記錄時間外僅侷限於記錄類、方法、參數和返回值,提供不了多少有實用價值的業務信息。
大家一般是怎麼記錄業務信息的呢?直接在業務方法裏調log的API?例如
log.info(userid+"錄入一篇新的公文,公文id爲:"+doc.id);
這樣的話,業務和日誌又綁定到一塊去了。
偶後來所想的方法呀,是這樣的,通過與類名相同的配置文件的方式來記錄日誌。
例如,可以在
com.xxx.businessobject.Business1.java的同級目錄下,放置一個
com.xxx.businessobject.Business1.log.properties文件,文件內容爲
addNewDoc=${user.id}插入了一個新的文檔,文檔id爲${param[0].id}
deleteDoc=${userid}刪除了${result.num}個文檔
其中${}裏面的內容是類似於EL表達式的字符串,可以做幾個簡單的約定
${user}:代表當前操作用戶
${user.id}:代表去當前操作用戶的id屬性
${param[0]}:代表第1個參數
${param[1].name}:代表第2個參數的name屬性
${this.book.id}:代表當前對象的book屬性的id成員變量
${result}:代表方法返回值
${result.num}:代表返回值對象的num屬性。
這樣就可以對代碼無侵入式的業務級的日誌記錄了
當然啦,如果求方便的話,是可以不使用配置文件的哦,大家都覺得配置文件已經夠多了
偶覺得用Annotation的話,看起來效果會更好
例如這樣子
@Log("插入了一個新文檔${params[0].id}");
public void addNewDoc(Doc doc){
//
}
這樣做日誌唯一不好的地方就是,沒辦法更細粒度的記錄日誌了,例如方法裏的一些臨時變量的信息之類