nekop's blog

OpenShift / JBoss / WildFly / Infinispanの中の人 http://twitter.com/nekop

JBoss LogManager

JBoss Advent Calendar 2012の6日目のエントリです。今日はJBoss LogManager

先日解説した通り、JBoss LogMangerはJUL(java.util.logging)の拡張です。じゃあどんなところが具体的に拡張されているの、というところをソースから読み取っていきましょう。と思って見てみたら、ほぼLog4jの機能を網羅したものでした。NDC、MDC、ログ出力環境を切り替えるLogContext、各種フィルタとログ書き込みを行うログハンドラが一通り。

ログ出力のフォーマット表記はLog4jのPatternLayoutをほぼ踏襲していますが、JBoss LogManagerのFormatStringParserを見るといくつかの追加のフォーマットがあり、その中にターミナルのカラーコード出力というのがありました。

というわけでやってみましょう。これは最新のJBoss LogManager 1.4系で追加されている機能であり、現在リリースされているJBoss AS 7.1系やEAP 6.0系のJBoss LogManagerは1.3系なので利用できません。AS 7.2およびEAP 6.1から利用可能になります。今回はJBoss AS7のmaster、つまり7.2の開発ブランチをビルドして試してみます。

ビルドして$JBOSS_HOME/standalone/configuration/standalone.xmlを見ると、なんとコンソールハンドラでデフォルトでカラーが有効になる指定がされています。%K{level}という指定はレベルに応じて出力全体を色付けする特殊指定です。

<pattern-formatter pattern="%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>

カラーはColorMapで定義されていて、デフォルトの%K{level}の出力のルールだとINFOは色付けなし、ERRORとWARNとDEBUGがそれぞれ赤、黄色、緑に色付けされるようになっています。

デフォルト設定だとコンソールはINFO以上の出力となっており、DEBUGは出力されないようになっているので、DEBUGを出力されるようにしてついでにWARNも発生させてみます。

Cool.