1

私はアプリケーションを開発しています。その一環として、Java プログラムの実行時に、コードが実行された Java プログラムのソースの行番号を表示したいと考えています。Code クラスを使用して、コード内のメソッドの行番号を取得しています。しかし、実行されたソースの行番号、つまりコードパスを取得したいのです。

これに、メソッドの行番号を表示するために書いたプログラムを追加します。

class LineNum
{
  LineNumber[] ln = new LineNumber[300];
  JavaClass clazz ;
  Code classinfo ;

  public static void printCode(Method[] methods) {
    System.out.println("Entering PrintCode");
    for(int i=0; i < methods.length; i++) {
      System.out.println(methods[i]);

      Code code = methods[i].getCode();
      if(code != null) // Non-abstract method
      {  
        System.out.println(code.getLineNumberTable());
      }
    }
  }
  public static void main(String[] args) {
    LineNum liner = new LineNum();
    liner.clazz = Repository.lookupClass("package_name.File_name");
    printCode(liner.clazz.getMethods());
  }
}
4

3 に答える 3

2

ロギング ライブラリとして Log4J を使用する場合は、パターンの一部として行番号を出力するように設定できます。「PatternLayout」および「L」変換パターン文字を参照してください。

次のような変換パターンを使用できます"%-5p [%t](%L): %m%n":

   DEBUG [main](103): Message 1
   WARN  [main](104): Message 2

パターンレイアウト API: http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html

于 2012-08-31T10:51:51.453 に答える
2

あなたは呼び出すことができます

StackTraceElement[] ele = Thread.currentThread().getStackTrace()

以前の呼び出しを提供するいつでも。StackTraceElement クラスには、行番号を取得する getLineNumer() メソッドがあります。

http://docs.oracle.com/javase/7/docs/api/java/lang/StackTraceElement.html

于 2012-08-31T10:41:43.317 に答える
1

lo4j を使用することが最善の解決策だと思います (@bazwilliams による記述)。コードは単純なライブラリに依存しており、ロギング行番号はコード外でオプションで構成できます。

@bazwilliams - 選択したログ カテゴリに対してのみレイアウト パターンを構成できます (したがって、選択したアペンダーを構成します)。

PS。@bazwilliamsの回答にコメントする方法がわからなかった(またはできなかった)ため、回答しました。

于 2012-08-31T11:15:04.130 に答える