工作中面臨日誌問題以及自己現有日誌的備份,記錄備份
問題的產生,必有其理由。說白點也就是客戶需要,沒辦法的事。不過也到給我們添了不少麻煩。本人也希望大牛們能給在下提提更多的思路,在下在此謝過。
具體是這樣:
1.要記錄操作人員,操作時間,操作相應模組
2.要記錄操作的未經處理資料(ps:列層級)和變更後資料
面臨問題:
1.各個方法相對獨立,沒有公用介面
2.形參順序不一,類型不一以及方法名稱不一
針對以上,要是解決其實也很簡單,主要不怕麻煩。寫個介面,每個模組去調用,這種簡單而且有效方法。不過模組太多而且繁瑣這要累死個人。
目前就我自己發現以及朋友提醒再加上資料等資訊,大致將其分為2類,共四種方法:
第一類(每個相關業務中需要手工添加執行功能部分):
1.寫日誌操作類,在相關模組中添加此介面調用。這種方法比較簡單,如果一開始就有這部分代碼,那就更好解決了。此種方法自不必多說,跟正常介面一樣。
2.利用訊息中介軟體,2和1實作類別似,也需要每次都調用jms,不過論效能2比1好點
3.利用log4j日誌記錄,相關請看:http://blog.csdn.net/ziruobing/article/details/3919501,logback也有相關
第二類(使用Aop,攔截器等):
1.Aop,該實現思路@BussAnnotation註解可以標示相關商務資訊(ps:新增,刪除,修改等操作,以及所屬模組等資訊,aop中形參ProceedingJoinPoint可以擷取參數對象
@Component("userManager")
public class UserManagerApplogicImpl implements UserManagerApplogic {
@BussAnnotation(moduleName="人員管理",option="添加使用者")
public void addUser(String name) {
System.out.println("add a User!Name is "+name);
}
}
@Aspect
@Component
public class LogInterceptor {
@Pointcut("execution(public * com.mlliud..*.addUser(..))")
public void aApplogic() {}
@Around(value = "aApplogic() && @annotation(annotation) &&args(object,..) ", argNames = "annotation,object")
public Object interceptorApplogic(ProceedingJoinPoint pj,BussAnnotation annotation, Object object) throws Throwable {
System.out.println("moduleName:"+annotation.moduleName());
System.out.println("option:"+annotation.option());
pj.proceed();
return object;
}
}
2.攔截器,這個簡單日誌還好,其他目測算了吧。個人愚笨只有想到根據訪問連結記錄一些日誌。
看來以上問題,針對我們項目做分析。得出一下結論:
1.第一類在項目初期考慮或者有相關需求還好,涉及每個模組相關代碼都要改,可以手工加入。要是項目結構複雜或者代碼量較多,我覺得很坑.....
2.第二類aop中@BussAnnotation註解雖然可以標示些關鍵資訊,但是我們畢竟要把整個vo的相關變更資訊記錄。由於當時參數沒有特殊規範,以及類型沒有規劃,造成ProceedingJoinPoint擷取參數沒有規律可尋,例如:addUser(User u,int a),updateUser(User u,String x) 這種我擷取第一個參數,往資料庫中存就可以。其他你懂的....
3.攔截器....
寫此篇文章希望各位大神能給咱提下想法,尋找更好方法....
也希望在此宣傳下群:189770377 希望各位大神能夠入住,多多提出好的想法。也希望學弟學妹們,能夠在此得到好的方向.