wildflyのロギングサブシステムで出てくるルートロガー・ロガー(ログカテゴリ)・ログハンドラーについての解説

wildflyのロギングサブシステムで出てくるルートロガー・ロガー(ログカテゴリ)・ログハンドラーについての解説

こんにちは、小吉です。

過去記事でwildflyにアプリケーションをデプロイして、アプリケーション専用のログファイルを作成するように設定できて、少しロギングサブシステムについて理解が出来てきたので、なるべく優しい言葉を使って解説します。

関連する過去記事はこちらからどうぞ。

wildflyのロギングサブシステムを理解するには、ざっくり3つの設定(ロガー、ルートロガー、ログハンドラー)の概念を掴む必要があります。細かい、かつ正確な説明はwildflyやjbossのドキュメントを見て頂くのが良いです。ここではざっくり初心者が理解し易いように説明します。3つの設定というのがこちらです。

ロガー(ログカテゴリ)

まずはロガーです。
一言でいうと、

ログを拾う人です。

ロガーはログカテゴリが紐づけられていて、そのログカテゴリに該当するログを拾う役割を担います。ログカテゴリとは、たとえば、「com.kokichiblog.helloworldというjavaパッケージのログ」というイメージです。そして、このロガーにはログカテゴリの他に、後述するログハンドラーというものを定義することが出来ます。

ルートロガー

これまた一言でいうと、

ロガーの親玉です。

親玉なので、ログカテゴリの紐づけは無く、各ロガーで拾われなかったログも含めて、全てのログを拾うことができます。ロガーはロガーなので後述するログハンドラーを定義することが出来ます。

wildflyをデフォルト状態で起動すると、デプロイしたアプリケーションのログはserver.logに出力されますが、これはデフォルトのルートロガーがログを拾い、デフォルトのハンドラーにより出力されています。

ログハンドラー

そして、ログハンドラーです。
これまた、一言でいうと、

ログを扱う人です。

たとえば、「ログをファイルに書き込むハンドラー」、「ログをsyslogに送るハンドラー」「ログを標準出力に出力するハンドラー」といった、扱い方に合わせたハンドラーの種類が用意されています。

ではログハンドラーはどのログを扱うのか?

感の良い人はわかったと思います。
そうです、ログハンドラーはロガーが拾ったログを扱います。
なので、ロガーやルートロガーにログハンドラーを設定することが出来るということです。

どんなことができる?

これら3つの設定を組み合わせる事で、例えば以下のようなログ設定が出来ます。

  • javaパッケージ「com.kokichiblog.helloworld」の全てのログをhelloworld.logに出力する。
  • javaパッケージ「com.kokichiblog.helloworld」のERROR以上のログをhelloworld_error.logに出力し、かつsyslogに送信する。

などなど。

どのようにログを保存したいか、運用に合わせて柔軟に設定できそうですね。上記を理解できていれば、簡単に設定できますので、気になる方はぜひ色々試してみて頂ければと思います。

最後までお読み頂きありがとうございました。

参考書籍