private static ClassPool pool = ClassPool.getDefault();
public static void log(JoinPoint point) throws TException, NotFoundException {
if (point != null) {
StringBuilder sb = new StringBuilder();
MethodSignature ms = (MethodSignature) point.getSignature();
CtClass cc = pool.get(point.getTarget().getClass().getName());
sb.append("类名:" + cc.getName());
CtMethod cm = cc.getDeclaredMethod(ms.getName());
sb.append(", 方法名:" + cm.getName());
MethodInfo mi = cm.getMethodInfo();
CodeAttribute ca = mi.getCodeAttribute();
LocalVariableAttribute attr = (LocalVariableAttribute) ca
.getAttribute(LocalVariableAttribute.tag);
String[] params = new String[cm.getParameterTypes().length];
int pos = Modifier.isStatic(cm.getModifiers()) ? 0 : 1;
int index = 0;
for (int i = 0; i < params.length; i++) {
index = i + pos;
params[i] = attr.variableName(index);
// System.out.println(attr.descriptor(index));
}
Object[] args = point.getArgs();
if (params.length > 0) {
sb.append(", 参数列表 [");
for (int i = 0; i < params.length; i++) {
if (i != 0)
sb.append(",");
sb.append(params[i] + ": " + args[i]);
}
sb.append("]");
}
System.out.println(sb.toString());
}
}
用AOP实现LOG的场合用
本文介绍如何利用AOP技术实现日志记录功能,包括获取类名、方法名、参数列表等关键信息,详细解析了日志记录的具体实现过程。

被折叠的 条评论
为什么被折叠?



