2016-10-10 3 views
0

マルチスレッドJavaプログラムのメソッド呼び出しを記録するJavaクラスを作成しようとしています。私は方法の呼び出しを取得する方法を見つけるために管理していない。私はRuntime.getRuntime()。traceMethodCalls(true)を使用して、Thread.getAllStackTraces()。values()を使用し、StackTraceElementをループしてみました。 ​​にアクセスすると、現在のコードが表示されます。改善のために何をすべきか教えてください。Javaで外部ツールや外部ライブラリを使用しないメソッド呼び出しをログに記録する

答えて

1

各メソッドごとに、または外部ツールなしで、ログステートメントをそのまま記述することなく、すべてのメソッド呼び出しをログに記録できない場合があります。おそらく、そのタスクを達成する最も簡単な方法はAspectJのようなツールを使ったアスペクト指向プログラミングです。実際には、これを行う方法についての記事も見つかりました。http://www.yegor256.com/2014/06/01/aop-aspectj-java-method-logging.htmlすべてのクラスにプロキシを使用して独自のツールを構築できます。

+0

何か別の方法がありますか?現在のwpilib javaプロジェクトでAspectJを動作させることができないためです – Nameless

0

他のクラスのログクラスへの参照があります。ロギングクラスをシングルトンとして設定し、そのインスタンスが1つしかないようにします。それをログに置かれる文字列を受け取り、いくつかの方法を与え、その後、あなたの他のクラスのメソッドを形成し、ロギングクラスのメソッドを呼び出す...

class Logger { 

    static addLogEntry(String logEntry) { 
     // some method to add log entry to your log 
    } 
} 


class Foo { 

    Logger aLogger; 

    public Foo() { 
     // get your singleton Logger instance 
     aLogger = getLogger(); 
    } 

    public void someMethodInThisClass() { 
     aLogger.addLogEntry("in someMethodInSomeClass"); 
    } 


} 

にそれを行うには、おそらくよりエレガントな方法を、それうまくいくはずです。

+0

これは私が望んでいたものではありません。実行時にすべてのメソッド呼び出しを取得してファイルに保存できるクラスが必要です。 – Nameless

関連する問題