程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 工作中面臨日志問題以及自己現有日志的備份,日志備份

工作中面臨日志問題以及自己現有日志的備份,日志備份

編輯:JAVA綜合教程

工作中面臨日志問題以及自己現有日志的備份,日志備份


    問題的產生,必有其理由。說白點也就是客戶需要,沒辦法的事。不過也到給我們添了不少麻煩。本人也希望大牛們能給在下提提更多的思路,在下在此謝過。

    具體是這樣:

     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  希望各位大神能夠入住,多多提出好的想法。也希望學弟學妹們,能夠在此得到好的方向.

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved