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" />
原文地址:https://www.cnblogs.com/yy123/p/6408844.html