wildflyのログハンドラーのfilter spec設定を変えてログの出力を確認してみた
こんにちは、小吉です。
前回の記事では、wildflyのロギングサブシステムについて超ざっくり解説しました。
wildflyのロギングサブシステムで出てくるルートロガー・ロガー(ログカテゴリ)・ログハンドラーについての解説
ルートロガー、ロガー、ログハンドラーにはそれぞれ設定項目があり、ログ出力を好きにカスタマイズすることができます。
今回は、実際にログ出力の役割を担うログハンドラーの設定をいじってログの出方を確認してみたいと思います。設定も後述の通りいくつかありますが、今回は主にfilter specという設定項目が気になっていたので、設定と実際のログ出力を見てみたいと思います。
前提
- wildfly 16
今回使用するロガーとログハンドラー
まずロガーの設定は以下で固定とします。
Category | com.kokichiblog.logtest |
Filter Spec | (設定なし) |
Handlers | com.kokichiblog.logtest |
Level | ALL |
Use Parent Handlers | true |
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の初期状態は以下の設定としておきます。
Append | True |
Autoflush | True |
Enabled | True |
Encoding | (設定なし) |
File / Path | logtest.log |
File / Relative To | jboss.server.log.dir |
Filter Spec | (設定なし) |
Formatter | %d{HH:mm:ss,SSS} %-5p %c %s%e%n |
Level | ALL |
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 Spec | accept |
Level | ALL |
出力
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 Spec | deny |
Level | ALL |
出力
(出力なし)
フィルター式:not
フィルター式を引数に取り、その引数のフィルター式の真偽を反転します。
設定
Filter Spec | not(deny) |
Level | ALL |
出力
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 Spec | all(match(“one”),match(“five”)) |
Level | ALL |
出力
TRACE [com.kokichiblog.logtest.LogMain] (default task-1) one two three four five
フィルター式:any
フィルター式のリストを引数に取り、それぞれのフィルター式のOR条件として該当するログのみ出力されます。
設定
Filter Spec | any(match(“one”),match(“five”)) |
Level | ALL |
出力
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 Spec | levelChange(WARN) |
Level | ALL |
出力
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 Spec | levels(WARN,DEBUG) |
Level | ALL |
出力
WARN [com.kokichiblog.logtest.LogMain] (default task-1) one two
DEBUG [com.kokichiblog.logtest.LogMain] (default task-1) one two three four
フィルター式:levelRange
指定したレベルの範囲のログを出力します。
()を使うと指定したレベルは対象外、[]を使うと指定したレベルも対象になります。
設定
Filter Spec | levelRange(DEBUG,WARN) |
Level | ALL |
出力
INFO [com.kokichiblog.logtest.LogMain] (default task-1) one two three
設定
Filter Spec | levelRange[DEBUG,WARN] |
Level | ALL |
出力
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 Spec | match |
Level | ALL |
出力
INFO [com.kokichiblog.logtest.LogMain] (default task-1) one two three
フィルター式:substitute
ログの文字列を置換をします。
一つのログにつき、ログ文字列の先頭から検索し、最初に該当する箇所のみ置換します。
置換前、置換後の順に設定します。
設定
Filter Spec | substitute(“e”,”E”) |
Level | ALL |
出力
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 Spec | substituteAll(“e”,”E”) |
Level | ALL |
出力
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の設定をする際の参考にして頂けると幸いです。
最後までお読み頂き、ありがとうございました。
参考書籍
-
前の記事
wildflyのログハンドラー一覧 2019.06.15
-
次の記事
ansibleコマンド実行時にselinuxのエラーとなった時の対処法 2019.07.20