4

scala 2.9 と akka 2.0 で分散データベースを実装しています。私の現在の問題は、標準のログ出力を stdout ではなくファイルにリダイレクトしたいということです。SLF4J や SLF4S は使いたくありません。ログ出力をリダイレクトする簡単な方法はありますか?

4

1 に答える 1

5

ロギングに関する akka のドキュメントには、次のように構成にハンドラーを登録できると書かれています。

akka {
  # Event handlers to register at boot time (Logging$DefaultLogger logs to STDOUT)
  event-handlers = ["akka.event.Logging$DefaultLogger"]
  # Options: ERROR, WARNING, INFO, DEBUG
  loglevel = "DEBUG"
}

SLF4J ハンドラもあります

akka.event.slf4j.Slf4jEventHandler

これを使用すると、logback などの SLF4J 準拠のライブラリを追加して、ログを好きな場所に書き込むことができます。

編集:

logback を使用してファイルにログを記録するには、logback を依存関係として追加する必要があります。構成に Slf4jEventHandler を追加します。

akka {
  # Event handlers to register at boot time (Logging$DefaultLogger logs to STDOUT)
  event-handlers = ["akka.event.slf4j.Slf4jEventHandler"]
  # Options: ERROR, WARNING, INFO, DEBUG
  loglevel = "DEBUG"
}

そして、次のようなものをロックするログバック構成をプロジェクトに追加します(ログバックドキュメントから取得):

<configuration>

  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>testFile.log</file>
    <append>true</append>
    <!-- encoders are assigned the type
         ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
    <encoder>
      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
    </encoder>
  </appender>

  <root level="DEBUG">
    <appender-ref ref="FILE" />
  </root>
</configuration>

akka の非同期ログのため、ログ パターンで %thread 変数を使用することはできません。代わりにsourceThread、MDC の変数を使用してください。このページの下部でそれについて読むことができます: http://doc.akka.io/docs/akka/2.0/scala/logging.html

コードで slf4j や logback を明示的に使用する必要はありません。通常の akka ロギングを使用するだけで、ハンドラーが他のすべてを処理します。

于 2012-05-08T08:06:10.493 に答える