并不是把項目運行日志打印的文件或者控制臺,而是需要把 誰,什么時候,操作了什么.操作的內(nèi)容是什么,顯示出來給使用oa的人員查閱.
例如:更新了一個客戶的名字.就需要記錄為 誰,什么時候,修改了 客戶,客戶原名字,客戶的新名字 記錄下來.
設(shè)計思路有:
1.在action 層使用sPRing aop.
好處是一個action 層的方法,即使包含了多個service 層的方法(操作),也會被看著是一個操作來記錄.
問題是:action 層從jsp 傳過來的參數(shù)是HttpServeletRequest 類型,根本不知道傳過來的參數(shù) 到底是什么.
2.在service 層使用spring aop.
好處是可以獲取到具體的參數(shù).
問題是:假如多個多個service 層方法組成一個action 層的方法,日志將會記錄多個操作,過于復(fù)雜,普通操作人員看不懂.
3.直接在action層手寫.不使用spring aop
將日志記錄到數(shù)據(jù)庫.好處是可以將日志寫的非常具體.
問題是: 每個方法都寫,太累!
最后使用方法2.
因為只對增加,刪除,修改做日志,這樣action 層一個方法都只有一個需要事務(wù)的方法(增刪改),所以是一對一,沒什么問題,可以寫的比較清晰.
實現(xiàn)的技術(shù)有 :在實體類添加自定義注解+spring aop +實體類添加getNameForLog() 方法.
getNameForLog() 方法會返回一個對象唯一的標(biāo)識,如名字,如Id.通過這個方法可以在aop 中獲取方法的參數(shù)對象的唯一名字.這個名字就是日志中的"操作的內(nèi)容是什么"的內(nèi)容,可以讓一般人看的懂是操作了什么對象.
有一個問題是:不知道在aop 中獲取參數(shù)更新前的數(shù)據(jù).因為update(obj) 中的obj 已經(jīng)是提交用于更新的.
在此也請教一下有沒有其他更好的方法實現(xiàn)這種日志記錄呢?謝謝!
新聞熱點
疑難解答