次のbtraceスクリプトがあります。特定のクラスの関数の開始と終了を記録したいと思います。
..
package com.sun.btrace.samples;
import com.sun.btrace.BTraceUtils;
import com.sun.btrace.Profiler;
import com.sun.btrace.annotations.*;
@BTrace class Profiling {
@Property
Profiler swingProfiler = BTraceUtils.Profiling.newProfiler();
@OnMethod(
clazz="com.pkg.classname",
method="/.*/")
void entry(@ProbeMethodName(fqn=true) String probeMethod) {
BTraceUtils.print("Entry" );
BTraceUtils.println(BTraceUtils.timestamp() );
BTraceUtils.println(probeMethod);
}
@OnMethod(
clazz="com.pkg.classname",
location=@Location(value=Kind.RETURN)
)
void exit(@ProbeMethodName(fqn=true) String probeMethod, @Duration long duration) {
BTraceUtils.print("Exit:" );
BTraceUtils.println(BTraceUtils.timestamp() );
BTraceUtils.println(probeMethod);
}
}
これにより、コンソールに出力が表示されます。結果をファイルに書き込むにはどうすればよいですか?Btraceでは、新しいオブジェクトを作成できません。
(明らかな回避策はファイルにリダイレクトすることです。別の選択肢は、VisualVM btraceプラグインを使用することです。出力はvisualVMウィンドウに送られます。500Mb程度の非常に大きな出力を処理するかどうかを確認してください。)
ありがとう