WildFly Swarm ログ設定

こんにちは。平田です。

WildFly Swarmでログ出力設定を変更してみます。

WildFly Swarmは、Java EEアプリケーションを実行可能JARにパッケージングするフレームワークです。Spring BootDropwizardのようなマイクロサービス向けフレームワークと似ていますが、Java EEでアプリを書くところが異なります。

ビルドするとWildFlyを組み込んだJARファイルが生成されますが、丸ごと入るわけでなくJava EEの機能のうち使っているものだけが同梱されます。とはいえ、サーブレットだけを使った場合でも30MBくらいのJARファイルになります。

また、Java EEの機能以外にもマイクロサービス向けの機能(サービスディスカバリ、監視、ログコレクタ、サーキットブレーカーなど)を組み込むことができます。

今回は、WildFly Swarmのサンプルを元に、ログ出力設定を変更してみます。デフォルトではINFOレベルのログが標準出力されますが、これをファイルに出してみます。まずサンプルをチェックアウトします。

$ git clone https://github.com/wildfly-swarm/wildfly-swarm-examples.git

次に、「static-shrinkwrap」サンプルをコピーします。このサンプルは静的HTMLファイルを同梱しただけの実行可能JARを作るもので凝った処理はないのですが、組み込みWildFlyの設定処理に関するサンプルコードが含まれているところがポイントです。

$ cd wildfly-swarm-examples/static
$ cp -r static-shrinkwrap static-shrinkwrap-logging

まずpom.xmlを開き、アーティファクト名を修正してからloggingフラクションへの依存関係を指定します。フラクションとは、WildFly Swarmにおける着脱可能な機能のことで、使うものだけ指定します。基本的にWildFlyのサブシステムに相当するほか、前述のマイクロサービス向け機能も指定できます。

<artifactId>example-static-shrinkwrap-logging</artifactId>
...
<dependency>
 <groupId>org.wildfly.swarm</groupId>
 <artifactId>logging</artifactId>
</dependency>

次に、ログ出力設定処理を追記します。XML断片で宣言的に設定できますが、ここではJava APIを使います。

 container
 .fraction(LoggingFraction
 .createDefaultLoggingFraction()
 .fileHandler("FILE", (h) -> {
 h.encoding(StandardCharsets.UTF_8.name())
 .file(new HashMap<String, String>() {{ put("path", "/tmp/server.log"); }});
 })
 .rootLogger(Level.INFO, "FILE"))
 .start().deploy(deployment);

ラムダを使って記述します。ここでは、/tmp/server.logにログ出力しています。WildFly Swarmのドキュメントには書き方の説明が全く無いのですが、基本的にWildFlyのサブシステム設定と同じです。設定の詳細を調べるときはWildFly本体の管理設定マニュアルが参考になります。

ビルドして実行してみます。Mavenの親プロジェクトへの依存があるため、親プロジェクトごと全体をビルドします。テストをスキップしても相当時間がかかります。

$ cd path/to/wildfly-swarm-examples
$ mvn -Dmaven.test.skip=true clean install

example-shrinkwrap-logging-swarm.jarが生成されるので、これを実行します。

$ cd static/static-shrinkwrap-logging/target
$ java -jar example-static-shrinkwrap-logging.jar
15:46:09,736 INFO [org.jboss.msc] (main) JBoss MSC version 1.2.6.Final
15:46:09,852 INFO [org.jboss.as] (MSC service thread 1-6) WFLYSRV0049: WildFly Core 2.0.10.Final "Kenny" starting

二行だけ標準出力に出てしまっていますね…。おそらくloggingフラクションの設定が有効になるまでのものだと思います。/tmp/server.logにもログが出ているはずです。

java -jarで実行できるというのは魅力的です。開発者のセットアップもIDEでのデバッグも配布もミドルウェアアップデートも単純になります。Red Hat者はコンテナ、マイクロサービス、DevOpsを推進したいようなので、WildFly Swarmもそのうちサポートされるのでしょう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です