wildflyのログハンドラーのfilter spec設定を変えてログの出力を確認してみた

こんにちは、小吉です。

前回の記事では、wildflyのロギングサブシステムについて超ざっくり解説しました。

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

ルートロガー、ロガー、ログハンドラーにはそれぞれ設定項目があり、ログ出力を好きにカスタマイズすることができます。

今回は、実際にログ出力の役割を担うログハンドラーの設定をいじってログの出方を確認してみたいと思います。設定も後述の通りいくつかありますが、今回は主にfilter specという設定項目が気になっていたので、設定と実際のログ出力を見てみたいと思います。

前提

  • wildfly 16

今回使用するロガーとログハンドラー

まずロガーの設定は以下で固定とします。

Categorycom.kokichiblog.logtest
Filter Spec(設定なし)
Handlerscom.kokichiblog.logtest
LevelALL
Use Parent Handlerstrue

Categoryで指定しているのはこのカテゴリでキャプチャする対象とするjavaパッケージ名です。そして、Handlersに指定しているcom.kokichiblog.logtestという名前のログハンドラーの設定をいじっていきます。

なお、com.kokichiblog.logtestはfile handlerという種類のログハンドラーです。
wildfly 16で使用可能なログハンドラーの種類については、以下の過去記事で紹介していますので、併せてお読みください。
wildflyのログハンドラー一覧

ログハンドラー(file handler)の設定項目

file handlerで設定できる項目は以下となります。

Appendログを既存ファイルに追記するかどうか。
Autoflushそれぞれのログ単位で書き込みを実施するか
Enabled有効にするか
Encoding使用する文字エンコーディング
File / Pathログファイル名
File / Relative Toログファイル出力先パス
Filter Specログのフィルタルール
Formatterログ出力フォーマット
Levelログレベル
Named Formatter別途定義されたフォーマッターを指定

ログハンドラーcom.kokichiblog.logtestの設定

今回いじってみるログハンドラーcom.kokichiblog.logtestの初期状態は以下の設定としておきます。

AppendTrue
AutoflushTrue
EnabledTrue
Encoding(設定なし)
File / Pathlogtest.log
File / Relative Tojboss.server.log.dir
Filter Spec(設定なし)
Formatter%d{HH:mm:ss,SSS} %-5p %c %s%e%n
LevelALL
Named Formatter(設定なし)

ロガーの設定でLevelはALLに設定しているため、Javaパッケージcom.kokichiblog.logtestで出力されるログは全て、ログハンドラーcom.kokichiblog.logtestで扱う対象となります。 そして、ログハンドラーの初期状態でもFilter Specは設定せず、LevelはALLとして、全てのログをファイルに保存するようにしてあります。

Filter Specをいじってみる

やっと、ここまで来ました。
まずは、前述の初期状態で出力されるログは以下となります。

ERROR [com.kokichiblog.logtest.LogMain] (default task-1) one
WARN  [com.kokichiblog.logtest.LogMain] (default task-1) one two
INFO  [com.kokichiblog.logtest.LogMain] (default task-1) one two three
DEBUG [com.kokichiblog.logtest.LogMain] (default task-1) one two three four
TRACE [com.kokichiblog.logtest.LogMain] (default task-1) one two three four five

そして、Filter Specにも様々なフィルター式を定義できます。
公式ドキュメントはこちらです。

フィルター式:accept

全てのログを容認します。

設定

Filter Specaccept
LevelALL

出力

ERROR [com.kokichiblog.logtest.LogMain] (default task-1) one
WARN  [com.kokichiblog.logtest.LogMain] (default task-1) one two
INFO  [com.kokichiblog.logtest.LogMain] (default task-1) one two three
DEBUG [com.kokichiblog.logtest.LogMain] (default task-1) one two three four
TRACE [com.kokichiblog.logtest.LogMain] (default task-1) one two three four five

フィルター式:deny

全てのログを否認します。

設定

Filter Specdeny
LevelALL

出力

(出力なし)

フィルター式:not

フィルター式を引数に取り、その引数のフィルター式の真偽を反転します。

設定

Filter Specnot(deny)
LevelALL

出力

ERROR [com.kokichiblog.logtest.LogMain] (default task-1) one
WARN  [com.kokichiblog.logtest.LogMain] (default task-1) one two
INFO  [com.kokichiblog.logtest.LogMain] (default task-1) one two three
DEBUG [com.kokichiblog.logtest.LogMain] (default task-1) one two three four
TRACE [com.kokichiblog.logtest.LogMain] (default task-1) one two three four five
(出力なし)

フィルター式:all

フィルター式のリストを引数に取り、それぞれのフィルター式のAND条件として該当するログのみ出力されます。

設定

Filter Specall(match(“one”),match(“five”))
LevelALL

出力

TRACE [com.kokichiblog.logtest.LogMain] (default task-1) one two three four five

フィルター式:any

フィルター式のリストを引数に取り、それぞれのフィルター式のOR条件として該当するログのみ出力されます。

設定

Filter Specany(match(“one”),match(“five”))
LevelALL

出力

ERROR [com.kokichiblog.logtest.LogMain] (default task-1) one
WARN  [com.kokichiblog.logtest.LogMain] (default task-1) one two
INFO  [com.kokichiblog.logtest.LogMain] (default task-1) one two three
DEBUG [com.kokichiblog.logtest.LogMain] (default task-1) one two three four
TRACE [com.kokichiblog.logtest.LogMain] (default task-1) one two three four five

フィルター式:levelChange

ログを指定したレベルに変更します。

設定

Filter SpeclevelChange(WARN)
LevelALL

出力

WARN  [com.kokichiblog.logtest.LogMain] (default task-1) one
WARN  [com.kokichiblog.logtest.LogMain] (default task-1) one two
WARN  [com.kokichiblog.logtest.LogMain] (default task-1) one two three
WARN  [com.kokichiblog.logtest.LogMain] (default task-1) one two three four
WARN  [com.kokichiblog.logtest.LogMain] (default task-1) one two three four five

フィルター式:levels

指定したレベルのみ出力します。

設定

Filter Speclevels(WARN,DEBUG)
LevelALL

出力

WARN  [com.kokichiblog.logtest.LogMain] (default task-1) one two
DEBUG [com.kokichiblog.logtest.LogMain] (default task-1) one two three four

フィルター式:levelRange

指定したレベルの範囲のログを出力します。
()を使うと指定したレベルは対象外、[]を使うと指定したレベルも対象になります。

設定

Filter SpeclevelRange(DEBUG,WARN)
LevelALL

出力

INFO  [com.kokichiblog.logtest.LogMain] (default task-1) one two three

設定

Filter SpeclevelRange[DEBUG,WARN]
LevelALL

出力

WARN  [com.kokichiblog.logtest.LogMain] (default task-1) one two
INFO  [com.kokichiblog.logtest.LogMain] (default task-1) one two three
DEBUG [com.kokichiblog.logtest.LogMain] (default task-1) one two three four

フィルター式:match

正規表現にマッチしたログのみ出力します。

設定

Filter Specmatch
LevelALL

出力

INFO  [com.kokichiblog.logtest.LogMain] (default task-1) one two three

フィルター式:substitute

ログの文字列を置換をします。
一つのログにつき、ログ文字列の先頭から検索し、最初に該当する箇所のみ置換します。
置換前、置換後の順に設定します。

設定

Filter Specsubstitute(“e”,”E”)
LevelALL

出力

ERROR [com.kokichiblog.logtest.LogMain] (default task-1) onE
WARN  [com.kokichiblog.logtest.LogMain] (default task-1) onE two
INFO  [com.kokichiblog.logtest.LogMain] (default task-1) onE two three
DEBUG [com.kokichiblog.logtest.LogMain] (default task-1) onE two three four
TRACE [com.kokichiblog.logtest.LogMain] (default task-1) onE two three four five

フィルター式:substituteAll

ログの文字列を置換をします。
一つのログにつき、ログ文字列の先頭から検索し、該当する箇所全てを置換します。
置換前、置換後の順に設定します。

設定

Filter SpecsubstituteAll(“e”,”E”)
LevelALL

出力

ERROR [com.kokichiblog.logtest.LogMain] (default task-1) onE
WARN  [com.kokichiblog.logtest.LogMain] (default task-1) onE two
INFO  [com.kokichiblog.logtest.LogMain] (default task-1) onE two thrEE
DEBUG [com.kokichiblog.logtest.LogMain] (default task-1) onE two thrEE four
TRACE [com.kokichiblog.logtest.LogMain] (default task-1) onE two thrEE four fivE

本記事の最後に

今回はFilter Specにフォーカスして設定してみました。
アプリケーション側で対応しなくても、ログレベルやログ文字列を置換できるのは便利ですね。
wildflyの設定をする際の参考にして頂けると幸いです。
最後までお読み頂き、ありがとうございました。

参考書籍