Spring AOP解决系统日志备忘
来源:互联网 发布:淘宝拍卖海关真的吗 编辑:程序博客网 时间:2024/05/19 22:25
配置文件:
<!-- 操作日志切面声明 --> <bean id="logAspect" class="com.tq365.service.sys.log.SystemLogAspect"/> <aop:config> <aop:aspect ref="logAspect"> </aop:aspect> </aop:config>
Java代码:
/** * 系统操作日志切面 * * @author archie2010 * since 2011-3-17 下午02:44:03 */@Aspectpublic 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("----------保存操作日志"); }}
- Spring AOP解决系统日志备忘
- Spring AOP记录系统日志
- Spring AOP 系统日志记录
- Spring -aop 实现系统日志
- Spring AOP 系统日志记录
- 采用spring AOP 和注解解决日志
- Spring AOP实现系统日志记录
- spring aop 异步处理系统日志
- Spring AOP 实现系统操作日志记录
- Spring AOP实现系统日志记录
- spring AOP 为系统增加操作日志
- Spring AOP 实现系统操作日志记录
- spring aop 实现系统日志的记录
- spring aop 学习备忘
- spring aop 备忘 参考
- spring Aop备忘
- 利用Spring AOP自定义注解解决日志和签名校验
- 利用Spring AOP自定义注解解决日志和签名校验
- 黑马程序员-银行调度系统1
- android实用代码积累
- Navicat for Mysql 注册码
- 黑马程序员-银行调度系统2
- 当当网退货流程
- Spring AOP解决系统日志备忘
- 基于mini2440的led驱动编写的总结
- expdp network_link参数
- 黑马程序员-android视频播放器
- HttpURLConnection用法详解
- java中double四舍五入并设置小数点位数的问题
- 从NFS启动TQ2440
- java同步和互斥的应用:生产者消费者之爸爸妈妈儿子女儿苹果橘子编程实现
- 第十六周任务一