Play frameworkのいろいろなモジュール2 ーWebsocketを利用したアペンダ、Log4play

play

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Log4playとは

今回紹介するPlayモジュールは、Log4play ※1というモジュールです。
Play frameworkは標準でログライブラリにlog4jを使用しており、プログラム内で使用可能ですが、
このLog4PlayはEventStreamにログエントリを公開するためのlog4jアペンダを提供するモジュールです。
そしてログメッセージをリアルタイムで監視するためのUIも提供します。
ログメッセージが生成されたタイミングでUIへ通知するためにWebsocketを使用しています。
ではセットアップからはじめてみましょう。

インストール

Log4playをインストールします。
なお、本記事での動作確認環境は下記の通りです。

  • OS : MacOS X 10.7.1
  • Java SE: 1.6.0_26
  • Play framework : 1.2.3
  • Log4play : 0.5

Play frameworkはインストールしてパスを通しておいてください。

インストールはいつものように簡単です。play installコマンドでモジュールをインストールします。

$ play install log4play-0.5
~        _            _ 
・・・・・
~ Fetching http://www.playframework.org/modules/log4play-0.5.zip
~ [--------------------------100%-------------------------] 26920.7 KiB/s    
~ Unzipping...
~
~ Module log4play-0.5 is installed!
~ You can now use it by adding it to the dependencies.yml file:
~
~ require:
~     play -> log4play 0.5
~

インストールはこれで完了です。次にサンプルプロジェクトで動作確認してみましょう。

動作確認

l4pSampleという名前でプロジェクトを作成します。

$ play new l4pSample

生成されたl4pSampleディレクトリに移動し、conf/dependencies.ymlを下記のように編集します。

# Application dependencies
require:
    - play    
    - play -> log4play 0.5

play depsコマンドで必要モジュールの設定は完了です。

$ play deps
・・・・・・・・・・・
~
~ Installing resolved dependencies,
~
~ 	modules/log4play-0.5 -> /pgdev/play/play-1.2.3/modules/log4play-0.5
~ 	modules/betterlogs-1.0
~
~ Done!
~

デフォルトで生成されたコントローラーで、ログを出力するようにしましょう。
app/controllers/Application.javaを下記のように変更します。

package controllers;
import play.*;
・・・・
public class Application extends Controller {
    public static void index() {
    	Logger.debug("debug!!!");
    	Logger.info("info!!!");
    	Logger.warn("warn!");
    	Logger.error("error!");
        render();
    }
}

アプリケーションを起動させて、動作を見てみましょう。

$ play run

まずブラウザでhttp://localhost:9000/@logsを開いてみてください。これがLog4playによって用意されるログ監視画面です。
ログレベルでフィルタリングもできるようになってます。
この画面を開いたらもう1つブラウザを開き、http://localhost:9000/を開いてください。
さきほど記述したログ出力が実行され、はじめに開いた画面へ通知されました。
このように、Websocketを用いてpush形式でログの通知を受け取ることができます。

まとめ

今回はplay用ログモジュールについてご紹介しました。
簡単に組み込みが可能で、ログをそのままモニタリングできる画面も利用できるので使いやすいと思います。
なお、サンプルではコンソールにログを出していますが、confディレクトリにlog4j.propertiesを用意すれば、
Fileアペンダ等を用いてログの出力先を変更することも出来ます。
ではまた次回。

参考サイトなど

AWS Cloud Roadshow 2017 福岡