zoukankan      html  css  js  c++  java
  • java--Aop--记录日志

    package com.pt.modules.log;
    
    import java.util.Map;
    import java.util.concurrent.ConcurrentHashMap;
    
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.Around;
    import org.aspectj.lang.annotation.Aspect;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.context.annotation.Scope;
    
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONObject;
    import com.pt.modules.cfca.util.OutLogTextUtil;
    import com.pt.modules.contract.rmtcontractlog.dto.RmtContractLogDTO;
    import com.pt.modules.contract.rmtcontractlog.service.RmtContractLogService;
    import com.pt.modules.contract.utils.Customannotations.OperationDescription;
    
    @Aspect
    @Scope("prototype")
    public class LoanLogAspect {
    
        private Logger logger = LoggerFactory.getLogger(LoanLogAspect.class);
    
        // 缓存有@OperationDescription方法参数名称
        private static Map<String, String[]> parameterNameCaches = new ConcurrentHashMap<String, String[]>();
        /**
         * 接口请求记录实例
         */
        @Autowired
        @Qualifier("com.pt.modules.contract.rmtcontractlog.service.RmtContractLogService")
        private RmtContractLogService rmtContractLogService;
        
        
    
        @Around("execution(* com.pt.modules.*.rest.*Rest*.*(..)) && @annotation(annotation)")
        public Object advice(ProceedingJoinPoint joinPoint, OperationDescription annotation) throws Throwable{
            String descption = annotation.description();
            String entityType = annotation.entityType();
            String reqContent = JSON.toJSONString(joinPoint.getArgs());
            logger.info("
    
    "+OutLogTextUtil.outLogText("--接口名称----"+entityType+"-----操作动作:----"+descption+"---拦截器-接收到请求报文------------"+ reqContent));
            Object result = joinPoint.proceed();
            JSONObject  response = JSON.parseObject(JSON.toJSONString(result));
            response = response.getJSONObject("body");
            String retcode = response.getString("retCode");
            String errorDesc = response.getString("errorDesc");
            RmtContractLogDTO dto = new RmtContractLogDTO();
            dto.setErrMessage(errorDesc);
            if(retcode!=""&&retcode!=null&&"302".equals(retcode)){
            dto.setState("0");//失败状态
            }else{
            dto.setState("1");//成功状态
            dto.setErrMessage(null);
            }
            this.saveRmtContractLog(dto, reqContent, "外部系统调用", entityType, descption,response.toString());
            logger.info("
    
    "+OutLogTextUtil.outLogText("--接口名称----"+entityType+"-----操作动作:----"+descption+"---拦截器-返回接口报文------------"+ response.toString()));
            return result;
        }
          
      
        public void saveRmtContractLog(RmtContractLogDTO dto,String requestJson,String Systemsource ,
                String interfaceName,String reqmapping,String responseJson) throws Exception{
            dto.setSystemsource(Systemsource);
            dto.setInterfaceName(interfaceName);
            dto.setRequestJson(requestJson);
            dto.setReqmapping(reqmapping);
            dto.setResponseJson(responseJson);
            rmtContractLogService.insertRmtContractLog(dto);
        }
    
    }
    package com.pt.modules.contract.utils.Customannotations;
    
    import java.lang.annotation.Documented;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Inherited;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    
    @Target(ElementType.METHOD)      
    @Retention(RetentionPolicy.RUNTIME)      
    @Documented     
    @Inherited 
    public @interface OperationDescription {
        /**  
         * 方法描述  
         * @return  
         */   
        public String description() default "no description"; 
        
        /**
         * 操作
         * @return
         */
        public String entityType() default "";
    }
        <aop:aspectj-autoproxy proxy-target-class="true" /> 
        <bean id="loanLogAspect" class="com.pt.modules.log.LoanLogAspect" />
  • 相关阅读:
    圆的国度:Can you understand what you see?
    P5732 杨辉三角
    Django中与CSRF相关的内容
    Python中一些可能会问到的面试题
    python协程,线程的其他方法
    python 线程
    python-进程-其他方法(2)
    python 进程的一些其他方法
    python进程--传参,for循环创建,join方法
    python并发编程
  • 原文地址:https://www.cnblogs.com/yy123/p/6408844.html
Copyright © 2011-2022 走看看