4

すべての囲みメソッドの引数とその値を含むログを作成するテンプレートをEclipseで作成したいと思います。たとえば、メソッドの場合:

foo(int i,String s)

テンプレートは次のように評価される必要があります。

myLogger.log("i="+i+",s=",s);

このようなものはありますか?

ありがとう

4

2 に答える 2

4

参考までに-必要なことを正確に行うのに役立つEclipseプラグインを見つけました。ここを参照してください: http://code.google.com/p/eclipse-log-param/

于 2012-05-07T11:55:22.667 に答える
1

ここでは、テンプレートよりもAspectJを使用します。
たとえば、メソッドパラメーターの汎用ログを参照してください。

/**
*
*/
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;
  }

}
于 2012-05-07T08:35:16.387 に答える