SLF4J の Profiler

中でどれくらいかかってるか知りたいなーと思ったり。でググったり。
そしたらあるじゃん本家に。
てことでSLF4J。

SLF4J extensions

Profiler

こう書いたら

55    public static void main(String[] args) {
56      // create a profiler called "BASIC"
57      Profiler profiler = new Profiler("BASIC");
58      profiler.start("A");
59      doA();
60  
61      profiler.start("B");
62      doB();
63  
64      profiler.start("OTHER");
65      doOther();
66      profiler.stop().print();
67    }

こう出るらしい

+ Profiler [BASIC]
|-- elapsed time                      [A]   220.487 milliseconds.
|-- elapsed time                      [B]  2499.866 milliseconds.
|-- elapsed time                  [OTHER]  3300.745 milliseconds.
|-- Total                         [BASIC]  6022.568 milliseconds.

ネストもできるぽい。
個人的には、あんまりネストを意識したくないので、勝手にネストしてくれるのがあってもよいなーと思った。

Logger 使う

上記の print() はコンソールに出力するので

66      profiler.stop().print();

ロガーを使う場合はセットして

23      // associate a logger with the profiler
24      profiler.setLogger(logger);

print() の代わりに log() を呼び出せば良いみたい。

39      // stop and log
40      profiler.stop().log();

log() メソッドは DEBUG レベルで "PROFILER" マーカーつきで出力されるそうな。
なのでレベルだけじゃなくてマーカーで出し分けできるから便利ね。

Read Source

時間はどうやってとってるのかなーと。ふと思って見てみたら System.nanoTime() だった。そっか。

StopWatch.java

  public void start(String name) {
    this.name = name;
    startTime = System.nanoTime();
    status = TimeInstrumentStatus.STARTED;
  }

クラスも8こだけだし。コード綺麗だし。さらっと読めて。楽しかったー。

# そういえば昔TPTPを使った記憶がかすかに残ってるけど今そのへんどうなってるのかなー。