我想在eclipse中创建一个模板,该模板将包含所有封闭方法的参数及其值的日志。 例如,对于方法:
foo(int i,String s)
模板应评估为:
myLogger.log("i="+i+",s=",s);
有类似的东西吗?
由于
答案 0 :(得分:4)
仅供参考 - 我找到了一个eclipse插件,可以帮助我完全按照我的需要进行操作。 见这里:http://code.google.com/p/eclipse-log-param/
答案 1 :(得分:1)
我宁愿在这里使用AspectJ而非模板。
例如,请参阅Generic Loggin of Method Parameters?
/**
*
*/
package at.systemone.examples.aop;
import org.apache.log4j.*;
import org.aspectj.lang.*;
import org.aspectj.lang.reflect.*;
public aspect LogMethod {
pointcut logMethod(): call (public * AOPLogging.*(..));
before(): logMethod(){
Logger log = Logger.getLogger(assembleFullName(thisJoinPointStaticPart));
Object[] paramValues= thisJoinPoint.getArgs();
String[] paramNames= ((CodeSignature)thisJoinPointStaticPart.getSignature()).getParameterNames();
logParamValues(log, paramNames, paramValues);
}
after() returning(Object o): logMethod(){
Logger log = Logger.getLogger(assembleFullName(thisJoinPointStaticPart));
// Object returnValue= thisJoinPoint.getArgs()[0];
if (log.isEnabledFor(Level.INFO)){
log.info("returns: '"+o+"'"); }
}
private void logParamValues(Logger log, String[] paramNames, Object[] paramValues) {
if (log.isEnabledFor(Level.INFO)) { // you can even gain perfomance by using the (otherwise unsexy) fast if clause
String nv="(";
for (int i=0; i<paramValues.length; i++) {
nv += paramNames[i]+" = '" + paramValues[i] +(i+1==paramValues.length?"')":"', ");
}
log.info(nv);
}
}
private String assembleFullName(JoinPoint.StaticPart joinPointStaticPart) {
Signature sig = joinPointStaticPart.getSignature();
String sign= sig.getDeclaringType().getName()+"."+sig.getName();
return sign;
}
}