Documentation

§ログの設定

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>

この設定には注意すべき点がいくつかあります:

§カスタム設定

どのような設定でも、カスタマイズする場合は独自の 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"
}

いくつかの点に注意してください:

つづいて、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 チームによってメンテナンスされているものではありません。 間違いを見つけた場合、このページのソースコードを ここ で確認することができます。 ドキュメントガイドライン を読んで、お気軽にプルリクエストを送ってください。