一、Controller
@Aspect
@Component
public class ControllerMonitor {
private static final Logger LOGGER = LoggerFactory.getLogger("CONTROLLER-DETAIL-AOP-LOGGER");
@Around("execution(* com.***.controller.*.*Controller.*(..))")
public Object aroundServiceAccess(ProceedingJoinPoint joinPoint) throws Throwable {
return Util.aopUtil(joinPoint, LOGGER);
}
}
二、aopUtil
public static Object aopUtil(ProceedingJoinPoint joinPoint, final Logger logger) throws Throwable {
try {
JoinPointUtil.logJoinPointBegin(logger, joinPoint, "begin");
long begin = System.currentTimeMillis();
Object result = JoinPointUtil.monitorJoinPoint(joinPoint);
long end = System.currentTimeMillis();
JoinPointUtil.logJoinPoint(logger, joinPoint, result, "end," + (end - begin) + "ms");
return result;
} catch (RuntimeException e) {
JoinPointUtil.logJoinPoint(logger, joinPoint, null, "exception", e);
throw e;
}
}
二、JoinPointUtil
public class JoinPointUtil {
public static Object monitorJoinPoint(ProceedingJoinPoint joinPoint) throws Throwable {
try {
Object result = joinPoint.proceed();
return result;
}
catch (Throwable e) {
throw e;
}
finally {
}
}
public static void logJoinPointBegin(
Logger logger,
ProceedingJoinPoint joinPoint,
String flag) {
StringBuilder sb = new StringBuilder();
sb.append(joinPoint.getSignature().toShortString());
sb.append(",flag=").append("[").append(flag).append("]");
sb.append(",args=").append(arrayToString(joinPoint.getArgs()));
LoggerUtil.info(logger, sb.toString());
}
public static Object logJoinPoint(
Logger logger,
ProceedingJoinPoint joinPoint,
Object result,
String flag) {
StringBuilder sb = new StringBuilder();
sb.append(joinPoint.getSignature().toShortString());
sb.append(",flag=").append("[").append(flag).append("]");
sb.append(",result=").append("[").append(String.valueOf(result)).append("]");
sb.append(",args=").append(arrayToString(joinPoint.getArgs()));
LoggerUtil.info(logger, sb.toString());
return result;
}
public static Object logJoinPoint(
Logger logger,
ProceedingJoinPoint joinPoint,
Object result,
String flag,
Throwable e) {
StringBuilder sb = new StringBuilder();
sb.append(joinPoint.getSignature().toShortString());
sb.append(",flag=").append("[").append(flag).append("]");
sb.append(",result=").append("[").append(String.valueOf(result)).append("]");
sb.append(",args=").append(arrayToString(joinPoint.getArgs()));
LoggerUtil.error(logger, sb.toString(), e);
return result;
}
private static String arrayToString(Object[] a) {
if (a == null)
return "null";
int iMax = a.length - 1;
if (iMax == -1)
return "[]";
StringBuilder b = new StringBuilder();
b.append('[');
for (int i = 0;; i++) {
if (a[i] instanceof Object[]) {
b.append(arrayToString((Object[]) a[i]));
} else {
b.append(String.valueOf(a[i]));
}
if (i == iMax)
return b.append(']').toString();
b.append(", ");
}
}
}