package com.dianping.credit.prevention.admin.aop;
/**
* 日志注解
* @Author: dainan
* @Date: 2019/10/17 15:18
* @Description:
*/
public @interface OperateLog {
}
切面代码
package com.dianping.credit.prevention.admin.aop;
import com.dianping.cat.Cat;
import com.dianping.credit.prevention.admin.utils.JacksonUtils;
import com.meituan.inf.xmdlog.XMDLogFormat;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
/**
* 各个操作日志记录
*
* @Author: dainan
* @Date: 2019/10/17 14:34
* @Description:
*/
@Aspect
@Slf4j
@Component
public class OperateLogAspect {
/**
* 类名
*/
private String CLASS_NAME = "className";
/**
* 方法
*/
private String METHOD = "method";
/**
* 参数
*/
private String OPERATE_PARA = "methodInvokeLog";
/**
* 结果
*/
private String RESULT = "result";
private String MESSAGE = "KZT_LOG 主控台";
/**
* 打印日志
*
* @param joinPoint
* @throws Throwable
*/
@Around("@annotation(com.dianping.credit.prevention.admin.aop.OperateLog))")
public Object operateLog(ProceedingJoinPoint joinPoint) throws Throwable {
String className = joinPoint.getTarget().getClass().getSimpleName();
String method = joinPoint.getSignature().getName();
String methodInvokeLog = buildMethodInvokeLog(joinPoint);
Object result = null;
try {
result = joinPoint.proceed();
log.info("{}=>{}", methodInvokeLog,result);
Cat.logEvent(className, method);
} catch (Throwable e) {
log.error(String.format("%s => fail", methodInvokeLog), e);
throw e;
}
String xmdLogFormat = XMDLogFormat.build().putTag(CLASS_NAME,className)
.putTag(METHOD,method)
.putTag(OPERATE_PARA,methodInvokeLog)
.putTag(RESULT, JacksonUtils.toString(result)).message(MESSAGE);
log.info(xmdLogFormat);
return result;
}
/**
* 获取切点名
*
* @param joinPoint
* @return
*/
private String buildMethodInvokeLog(ProceedingJoinPoint joinPoint) {
StringBuilder sb = new StringBuilder();
String className = joinPoint.getTarget().getClass().getSimpleName();
String method = joinPoint.getSignature().getName();
sb.append(className + "." + method + "(");
Object[] args = joinPoint.getArgs();
for (Object arg : args) {
sb.append(arg);
}
sb.append(")");
return sb.toString();
}
}
@Pointcut("execution(* com.sankuai.credit.caselibrary.server.service.impl.*.*(..))")
private void service() {
}
@Around("service()||@annotation(com.sankuai.credit.caselibrary.server.aop.Log)")
public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
String methodInvokeLog = buildMethodInvokeLog(joinPoint);
try {
Object result = joinPoint.proceed();
log.info("[LogAspect]{}=>{}", methodInvokeLog, CommonUtils.toJsonString(result));
return result;
} catch (Throwable e) {
log.error("[LogAspect]{}=>fail", methodInvokeLog, e);
throw e;
}
}
private String buildMethodInvokeLog(ProceedingJoinPoint joinPoint) {
StringBuilder sb = new StringBuilder();
String className = joinPoint.getTarget().getClass().getSimpleName();
String method = joinPoint.getSignature().getName();
sb.append(className + "." + method + "(");
Object[] args = joinPoint.getArgs();
for (int i = 0; i < args.length; i++) {
sb.append(args[i]);
if (i != args.length - 1) {
sb.append(",");
}
}
sb.append(")");
return sb.toString();
}