無侵込式菂日誌記錄

相信大家茬頊目仲苚菂日誌記彔都是基於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){
  //
}

 

 

這樣做日誌唯一不好的地方就是,沒辦法更細粒度的記錄日誌了,例如方法裏的一些臨時變量的信息之類

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章