« Perf4J | Main | JOTMの2PCのコネクション »

2009.02.23

Perf4J : org.perf4j.LoggingStopWatch

 多分、Perf4Jのライブラリを使うにあたって、もっとも基本的なクラスになるのではないかと(ライブラリ中でもっとも基本的なクラスは org.perf4j.StopWatch ですが、これだけだとログ出力等は行われないので)。

public void hoge() {
  long start = System.currentTimeMillis();
  // some task A
  System.err.println(System.currentTimeMillis() - start);
  start = System.currentTimeMillis();
  // some task B
  System.err.println(System.currentTimeMillis() - start);
  // some task
  start = System.currentTimeMillis();
  for (int i=0; i<10; i++) {
    // some task C
    System.err.println(System.currentTimeMillis() - start);
    start = System.currentTimeMillis();
  }  
}

ってな感じのソースが、

public void hoge() {
  StopWatch stopWatch = new LoggingStopWatch();
  // some task A
  stopWatch.lap("A");
  // some task B
  stopWatch.lap("B");
  // some task
  stopWatch.start();
  for (int i=0; i<10; i++) {
    // some task C
    stopWatch.lap("C");
  }
}

って感じで記述することができます。

せっかくなので、主なメソッドに関して。

LoggingStopWatch#start()

    開始時刻の情報をリセットします。引数にStringを渡すことでタグ付けを行うことができます。タグ付けを行っておくと、後で集計する時の条件として使用することができます。

LoggingStopWatch#stop()

    メソッド名はstopとなっていますが、実際に停止されるわけではなく、開始時刻からの経過時間を出力します。開始時刻はリセットされないため、コンストラクタで初期化あるいはstart()を実行した時点からの累計の処理時間が出力されることとなります。
    タグ付きでログ出力を行うこともできます。タグを指定していない場合、直前に指定されているタグで出力されます。

LoggingStopWatch#lap(String)

    それまでの経過時間を出力した後、開始時刻の情報をリセットします。lapを呼び出したタイミングで、その時点からの処理時間の計測になります。動きとしては、stop()&start()のような感じです。

 なお、LoggingStopWatchのログ出力は、標準エラー固定(ソースコードにおいてSystem.err.println(String)で記述されている)となっているため、log4jなどの設定は反映されません。

 ちなみに、LoggingStopWatchクラスそのものは設定ファイル等でログ出力のオン/オフを切り替えることはできないようなので、開発中くらいしか使い道はないような気もしつつ。もっとも、これのサブクラスを作成して、isLogging() および log(String, Throwable) メソッドをオーバーライドすることでオン/オフを切り替えるバージョンを作ることでもう少し使い勝手が良くなるかもしれません。

|

« Perf4J | Main | JOTMの2PCのコネクション »

Java」カテゴリの記事

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/3959/44145556

Listed below are links to weblogs that reference Perf4J : org.perf4j.LoggingStopWatch:

« Perf4J | Main | JOTMの2PCのコネクション »