配置文件:
- <!--操作日志切面声明-->
- <beanid="logAspect"class="com.tq365.service.sys.log.SystemLogAspect"/>
- <aop:config>
- <aop:aspectref="logAspect">
- </aop:aspect>
- </aop:config>
实现代码:
- /**
- *系统操作日志切面
- *
- *@authorarchie2010
- *since2011-3-17下午02:44:03
- */
- @Aspect
- publicclassSystemLogAspect{
- //int与long之Class会自动转为其封装类型之Class
- privatestaticfinalStringintegerClazz="classjava.lang.Integer";
- privatestaticfinalStringlongClazz="classjava.lang.Long";
- @Resource
- privateSystemLogServicesystemLogService;
- privateLoggerlogger=Logger.getLogger(this.getClass().getName());
- @Pointcut("execution(*com.tq365.service..*.*(..))")
- publicvoidmyAspect(){
- };
- @AfterThrowing(pointcut="myAspect()",throwing="e")
- publicvoiddoAfterThrowing(JoinPointjp,Throwablee){
- System.out.println("出现异常:"+e.getMessage());
- System.out.println(e.getClass().getName());
- System.out.println("异常所在类:"+jp.getTarget().getClass().getName());
- System.out.println(""+jp.getSignature().getName()
- +"方法throwexception");
- //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(inti=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)")
- publicvoiddoAfter(JoinPointjp){
- System.out.println("----------后置通知");
- System.out.println("方法所在类:"+jp.getTarget().getClass().getName());
- System.out.println(""+jp.getSignature().getName()+"方法");
- StringmethodName=jp.getSignature().getName();
- //操作日志对象-----------------
- SystemLogsysLog=newSystemLog();
- //操作参数-----------------
- StringdescArgs="参数";
- if(jp.getArgs()!=null&&jp.getArgs().length>0){
- for(inti=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);
- Stringdes=null;//方法描述
- if(!(methodName.startsWith("set")||methodName.startsWith("get"))){
- ClasstargetClass=jp.getTarget().getClass();
- //方法不定向参数Clazz...
- Class[]claszs=newClass[jp.getArgs().length];
- for(inti=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;
- }elseif(jp.getArgs()[i].getClass().toString().equals(
- longClazz)){
- claszs[i]=long.class;
- }else{
- claszs[i]=jp.getArgs()[i].getClass();
- }
- }elseif(jp.getArgs()[i]==null){
- claszs[i]=String.class;
- }
- }
- Methodmethod=null;
- try{
- method=targetClass.getMethod(methodName,claszs);
- }catch(SecurityExceptione){
- }catch(NoSuchMethodExceptione){
- }
- //若方法为空(描述无法获得则des=null)
- if(method!=null){
- System.out.println(method.getAnnotation(SystemLogAnnotation.class)
- .description());
- des=method.getAnnotation(SystemLogAnnotation.class).description();
- }
- }
- //获得Session
- HttpSessionsession=ServletActionContext.getRequest().getSession();
- //取到当前的操作用户
- UserappUser=(User)session.getAttribute("USER");
- if(appUser!=null){
- System.out.println("用户已经存在Session中");
- //操作日志对象
- sysLog.setUid(appUser.getUserId());
- sysLog.setUsername(appUser.getFullName());
- }
- HttpServletRequestrequest=ServletActionContext.getRequest();
- Stringip=request.getRemoteAddr();
- sysLog.setOperateTime(DateUtil.getCurrentTime());
- sysLog.setOperateDes(methodName+"->"+des);
- sysLog.setIp(ip);
- systemLogService.save(sysLog);
- System.out.println("----------保存操作日志");
- }
- }