§ログの設定
Play がログ出力に使っている Logback の詳細な設定は、Logback のドキュメント を参照してください。
§デフォルト設定
Play は本番環境で以下のデフォルト設定を使用します:
<!--
~ Copyright (C) 2009-2015 Typesafe Inc. <http://www.typesafe.com>
-->
<!-- The default logback configuration that Play uses if no other configuration is provided -->
<configuration>
<conversionRule conversionWord="coloredLevel" converterClass="play.api.Logger$ColoredLevel" />
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${application.home}/logs/application.log</file>
<encoder>
<pattern>%date [%level] from %logger in %thread - %message%n%xException</pattern>
</encoder>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%coloredLevel %logger{15} - %message%n%xException{10}</pattern>
</encoder>
</appender>
<appender name="ASYNCFILE" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="FILE" />
</appender>
<appender name="ASYNCSTDOUT" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="STDOUT" />
</appender>
<logger name="play" level="INFO" />
<logger name="application" level="DEBUG" />
<!-- Off these ones as they are annoying, and anyway we manage configuration ourself -->
<logger name="com.avaje.ebean.config.PropertyMapLoader" level="OFF" />
<logger name="com.avaje.ebeaninternal.server.core.XmlConfigLoader" level="OFF" />
<logger name="com.avaje.ebeaninternal.server.lib.BackgroundThread" level="OFF" />
<logger name="com.gargoylesoftware.htmlunit.javascript" level="OFF" />
<root level="WARN">
<appender-ref ref="ASYNCFILE" />
<appender-ref ref="ASYNCSTDOUT" />
</root>
</configuration>
この設定には注意すべき点がいくつかあります:
logs/application.log
に出力するファイルアペンダを指定しています。- コンロールロガーは例外スタックトレースを 10 行しか出力しませんが、ファイルロガーは例外スタックトレースをすべて記録します。
- Play はデフォルトでレベルメッセージに ANSI カラーコードを使います。
- Play はコンソールおよびファイルロガーを logback の AsyncAppender の裏側に配置します。これによる性能面の影響については、この ブログ記事 を参照してください。
§カスタム設定
どのような設定でも、カスタマイズする場合は独自の Logback 設定ファイルを指定する必要があります。
§プロジェクトソースにある設定ファイルを使う
conf/logback.xml
ファイルを用意することで、デフォルトのログ設定を定めることができます。
§外部設定ファイルを使う
システムプロパティで設定ファイルを指定することもできます。これは、設定ファイルがアプリケーションソースの外部で管理されるであろう本番環境において特に便利です。
注意: ログシステムは、システムプロパティで指定された設定ファイルに最高の優先度、次に
conf
ディレクトリにあるファイル、最後にデフォルトと優先度を与えます。これにより、アプリケーションのログ設定をカスタマイズしつつ、特定の環境や開発者の設定によって上書くことができます。
§-Dlogger.resource
を使う
クラスパスから設定ファイルを読み込むように指定します:
$ start -Dlogger.resource=prod-logger.xml
§-Dlogger.file
を使う
ファイルシステムから設定ファイルを読み込むように指定します:
$ start -Dlogger.file=/opt/prod/logger.xml
§例
以下は、ローリングファイルアペンダだけでなく、アクセスログを出力する別のアペンダも使う設定例です:
<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${user.dir}/web/logs/application.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- Daily rollover with compression -->
<fileNamePattern>application-log-%d{yyyy-MM-dd}.gz</fileNamePattern>
<!-- keep 30 days worth of history -->
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%date{yyyy-MM-dd HH:mm:ss ZZZZ} [%level] from %logger in %thread - %message%n%xException</pattern>
</encoder>
</appender>
<appender name="ACCESS_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${user.dir}/web/logs/access.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover with compression -->
<fileNamePattern>access-log-%d{yyyy-MM-dd}.gz</fileNamePattern>
<!-- keep 1 week worth of history -->
<maxHistory>7</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%date{yyyy-MM-dd HH:mm:ss ZZZZ} %message%n</pattern>
<!-- this quadruples logging throughput -->
<immediateFlush>false</immediateFlush>
</encoder>
</appender>
<!-- additivity=false ensures access log data only goes to the access log -->
<logger name="access" level="INFO" additivity="false">
<appender-ref ref="ACCESS_FILE" />
</logger>
<root level="INFO">
<appender-ref ref="FILE"/>
</root>
</configuration>
これは、いくつかの便利な機能を実演しています:
- 肥大化するログファイルの管理を支援する RollingFileAppender
を使います。
- アプリケーション外部のディレクトリにログファイルを書き出すので、アップグレードやその他の影響を受けません。
- FILE
アペンダは、Sumo Logic のようなサードパーティのログ解析プロバイダがパースできるように、メッセージフォーマットを拡張します。
- access
ロガーは、ACCESS_FILE_APPENDER
によって別のログファイルに転送されます。
- すべてのロガーの閾値は、本番ログ出力では一般的に選択される INFO
に設定されています。
§Akka ログ設定
設定によって Play 内部のログ機能を使うか使わないか分からないものの、Akka には独自のログシステムがあります。
デフォルトで Akka は Play のログ設定を無視し、独自のフォーマットを使ってログメッセージを STDOUT に出力します。このログレベルは application.conf
で設定することができます:
akka {
loglevel="INFO"
}
Akka に Play のログ機能を使うよう指示する場合、いくつかの注意深い設定が必要です。まず、以下の設定を application.conf
に追加します:
akka {
loggers = ["akka.event.slf4j.Slf4jLogger"]
loglevel="DEBUG"
}
いくつかの点に注意してください:
akka.loggers
を["akka.event.slf4j.Slf4jLogger"]
に設定することで、Akka が Play 内部のログ機能を使うようになります。akka.loglevel
プロパティは、Akka がログリクエストをログ機能に転送する閾値を設定しますが、ログ出力は管理しません。ログリクエストが転送されると、Logback 設定が通常どおりログレベルとアペンダを管理します。akka.loglevel
には、Logback 設定で Akka コンポーネントに指定する、もっとも低い閾値を設定すべきです。
つづいて、Logback 設定にて Akka のログ設定を改善します:
<!-- Set logging for all Akka library classes to INFO -->
<logger name="akka" level="INFO" />
<!-- Set a specific actor to DEBUG -->
<logger name="actors.MyActor" level="DEBUG" />
スレッドやアクターアドレスなどを含む便利な Akka ロガーのアペンダを設定したい場合もあることでしょう。
Logback と Slf4j の統合に関する詳細を含む Akka のログ設定詳細については、Akka のドキュメント を参照してください。
Next: Play フィルタの設定
このドキュメントの翻訳は Play チームによってメンテナンスされているものではありません。 間違いを見つけた場合、このページのソースコードを ここ で確認することができます。 ドキュメントガイドライン を読んで、お気軽にプルリクエストを送ってください。