reactive-web: Lift をシンプルに

Logger: セマンティックロギング

ロギングバックエンドがどのようなものであるかにかかわらず、構成を細かく調整できるロギングを可能にするため、reactive では次のようなアプローチを採用しています。すなわち、ダイレクトにロギングを行う代わりに、ログ可能なあらゆる情報については、定義された case クラスが用意され、このクラスに詳細な内容が収められます。このオブジェクトのロギングが十分に高いレベルにあると、その情報は LogEvent に入れられてグローバルな EventStream から発火されます。LogEvent は 2 つの引数を持つ case クラスです。引数のうち 1 つは subject、すなわち情報を「記録する」オブジェクトで、 もう 1 つは predicate、すなわち最初に説明した case クラスです。

Logger トレイトは、ログ機能を提供します。このトレイトは、reactive のさまざまなクラスによって使われるほか、プログラマが自分の作成したクラスで使用することができます。このトレイトを mixin するか、またはインスタンス化し、必要に応じて (一般にはそれを含むオブジェクトを指すようにするために) subject をオーバーライドします。このトレイトには、次のメンバがあります。

logLevel
ロギングレベルを指定する var です。
setLogLevel
ログレベルを設定し、Logger を返します。reactive の操作をチェインする場合に便利です。次の例を見てください。
val es2 = es.setLogLevel(Logger.Levels.Trace).map(_ + 2)
log
指定されたレベルと LogEventPredicate に基づいて LogEvent をログします。
tracewarnerror
該当するレベルで、指定された LogEventPredicate に基づいて LogEvent をログします。

Logger シングルトンには、ログイベントを発火する 1 つまたは複数の EventStream が含まれます。以下にメンバの一部を示します。

Levels
サポートされるレベルの Scala Enumeration です。
defaultLevel
以後作成される Logger のレベルを指定する var です。
all
すべてのイベントを発火する EventStream[(Levels.Value,Logger#LogEvent)] です。
traceswarningserrors
all から該当するイベントだけを発火する EventStream[Logger#LogEvent] です。