Spring aop 日志代码实例

来源:互联网 发布:比较好用的水乳 知乎 编辑:程序博客网 时间:2024/05/16 17:23

配置文件:
Xml代码

<!-- 操作日志切面声明  -->        <bean id="logAspect" class="com.tq365.service.sys.log.SystemLogAspect"/>     <aop:config>         <aop:aspect ref="logAspect">         </aop:aspect>     </aop:config>  

实现代码:
Java代码

/**  * 系统操作日志切面  *   */  @Aspect  public class SystemLogAspect {      // int与long之Class会自动转为其封装类型之Class      private static final String integerClazz = "class java.lang.Integer";      private static final String longClazz = "class java.lang.Long";      @Resource      private SystemLogService systemLogService;      private Logger logger = Logger.getLogger(this.getClass().getName());      @Pointcut("execution(* com.tq365.service..*.*(..))")      public void myAspect() {      };      @AfterThrowing(pointcut = "myAspect()", throwing = "e")      public void doAfterThrowing(JoinPoint jp, Throwable e) {          System.out.println("出现异常:" + e.getMessage());          System.out.println(e.getClass().getName());          System.out.println("异常所在类:" + jp.getTarget().getClass().getName());          System.out.println("" + jp.getSignature().getName()                  + "方法 throw exception");          // logger.error("错误! error级别的!!!"+e.getMessage());          logger.error("Oops===" + jp.getTarget().getClass().getName() + "中的"                  + jp.getSignature().getName() + "方法抛出" + e.getClass().getName()                  + "异常");          System.out.println("参数:");          ;          if (jp.getArgs() != null && jp.getArgs().length > 0) {              for (int i = 0; i < jp.getArgs().length; i++) {                  System.out.println(jp.getArgs()[i].toString());                  logger.error("参数:--" + jp.getArgs()[i].toString());              }          }      }      @SuppressWarnings("unchecked")      @After("@annotation(com.tq365.sys.annotation.SystemLogAnnotation)")      public void doAfter(JoinPoint jp) {          System.out.println("----------后置通知");          System.out.println("方法所在类:" + jp.getTarget().getClass().getName());          System.out.println("" + jp.getSignature().getName() + "方法");          String methodName = jp.getSignature().getName();          // 操作日志对象-----------------          SystemLog sysLog = new SystemLog();          // 操作参数-----------------          String descArgs = "参数";          if (jp.getArgs() != null && jp.getArgs().length > 0) {              for (int i = 0; i < jp.getArgs().length; i++) {                  if(jp.getArgs()[i]!=null){                      //System.out.println(jp.getArgs()[i].toString());                      descArgs += jp.getArgs()[i].toString()+",";                  }else{                      descArgs +="null"+",";                  }              }              System.out.println("------参数" + descArgs);          }          sysLog.setOperateArgs(descArgs);          String des = null;//方法描述          if (!(methodName.startsWith("set") || methodName.startsWith("get"))) {              Class targetClass = jp.getTarget().getClass();              //方法不定向参数Clazz...              Class[] claszs = new Class[jp.getArgs().length];              for (int i = 0; i < jp.getArgs().length; i++) {                  //System.out.println(jp.getArgs()[i]);                  if(jp.getArgs()[i]!=null){                      System.out.println(jp.getArgs()[i].getClass());                      if (jp.getArgs()[i].getClass().toString().equals(integerClazz)) {                          claszs[i] = int.class;                      } else if (jp.getArgs()[i].getClass().toString().equals(                              longClazz)) {                          claszs[i] = long.class;                      }else{                          claszs[i] =jp.getArgs()[i].getClass();                      }                  }else if(jp.getArgs()[i]==null){                      claszs[i] = String.class;                  }              }              Method method=null;              try {                  method = targetClass.getMethod(methodName, claszs);              } catch (SecurityException e) {              } catch (NoSuchMethodException e) {              }              //若方法为空(描述无法获得则des=null)              if(method!=null){                  System.out.println(method.getAnnotation(SystemLogAnnotation.class)                          .description());                  des = method.getAnnotation(SystemLogAnnotation.class).description();              }          }          // 获得Session          HttpSession session = ServletActionContext.getRequest().getSession();          // 取到当前的操作用户          User appUser = (User) session.getAttribute("USER");          if (appUser != null) {              System.out.println("用户已经存在Session中");              // 操作日志对象              sysLog.setUid(appUser.getUserId());              sysLog.setUsername(appUser.getFullName());          }          HttpServletRequest request = ServletActionContext.getRequest();          String ip = request.getRemoteAddr();          sysLog.setOperateTime(DateUtil.getCurrentTime());          sysLog.setOperateDes(methodName +"->"+ des);          sysLog.setIp(ip);          systemLogService.save(sysLog);          System.out.println("----------保存操作日志");      }  }
0 0
原创粉丝点击