Scala 用の StopWatch ライブラリを作りました。
https://github.com/akr4/stopwatch
処理にかかった時間を記録する、とてもシンプルなライブラリです。
StopWatch
パフォーマンスを測定するためのライブラリ
はじめに
built.sbt にこんなの追加してください。
resolvers ++= Seq(
"akr4.github.com releases" at "http://akr4.github.com/mvn-repo/releases"
)
libraryDependencies ++= Seq(
"net.physalis" %% "stopwatch" % "1.1"
)
使い方
import net.physalis.stopwatch._
val s = StopWatch.newOne
s.doWith("task1") {
// do something
}
この場合 StopWatchEventListener としてデフォルトの EventLogger が使われ、SLF4J の "stopwatch" カテゴリに処理にかかった時間がログが出力されます。こんな感じ
20:13:10.010 [run-main] INFO stopwatch - 1888ffbd-d129-4425-8dfd-e9b1138d984d task1 1054
start() と stop() を明示的に呼ぶこともできます。
val s = StopWatch.newOne
s.start("task1")
// do something
s.stop()
追加情報
stop() に追加の情報を渡せます。処理のパラメータや結果を記録しておくのに便利です。
val s = StopWatch.newOne
s.start("task1")
allCatch either { // process } match {
case Right(x) => s.stop("SUCCESS", x)
case Left(t) => s.stop("FAILURE", t.getMessage)
}
その他
StopWatchEventListener をカスタマイズすればログフォーマットや動作を変更することができます。
他の実装
Scala にはこういうのもありました。
https://github.com/aboisvert/stopwatch
統計情報をランタイムに計算してくれるのが特徴です。今回やりたいことと少し違ったので自作しました。
Java なら commons-lang や Spring にもありますね。
commons-lang:
http://commons.apache.org/lang/api-2.4/org/apache/commons/lang/time/StopWatch.html
Spring:
http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/util/StopWatch.html