Scala 用 StopWatch ライブラリ作りました

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