Play Framework 2.0でログファイルローテートしてみる

2013年5月21日

Play Framework 2.0系のプロジェクトで、リクエスト毎にログを出力するような設定をした場合、ログファイルをローテートしたくなったりします。

場合によってはlogrotateの設定でやったりもします。

が、今回は、Play Frameworkのログの設定でローテートしてみます。

Play Frameworkは、LogBackというミドルウェアを使用してログを出力します。

で、必要な設定などはすでにPlay Framework自体が設定してくれているので

ログを出力するのは

[text]
Logger.debug("debug ok")
[/text]

という感じでログが出力出来ます。

ログはデフォルトでは
{プロジェクト}/logs/application.log
に出力されます。

デフォルトではログファイルはローテートしないので、カスタマイズして見ます。

カスタマイズするには

logger.xml(ファイル名は適当)というファイルをconf配下に作成します。

Play Framework本体からlogger.xmlファイルをコピーして持ってくるのが確実かもしれません。

その場合は、
{Play Framework}/framework/src/play/src/main/resources/logger.xml
をコピーして持ってきます。

application.logに出力する設定は、

[text]
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
[/text]

という部分になります。 LogBackの設定で、ローテートさせる設定はというと、 このclassの部分を「ch.qos.logback.core.rolling.RollingFileAppender」に変える事で対応出来るようなので、変更します。 さらに、ローテートする条件と、ローテート時のログファイル名をappenderのメンバーとして以下のように指定します。

<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  <fileNamePattern>${application.home}/logs/application.%d{yyyy-MM-dd}.log</fileNamePattern>
  <maxHistory>10</maxHistory>
</rollingPolicy>

fileNamePatternは、ローテート時のログファイル名
maxHistoryは、ヒストリ保持期間(日)

となります。

これで設定ファイルは完成しました。

続いて、このログの設定ファイルを起動時に読み込む設定ですが、これは起動時のパラメータになります。

startコマンドでやる場合は

play "start -Dlogger.resource=logger.xml"

となります。

target/startの場合は

target/start -Dlogger.resource=logger.xml

となります。

今回はapplication.logという名前のままでしたが、本番用と開発用でログファイル名を分けるのも良いかもしれません。

アンケート