JBoss EAP7でアプリのDEBUGやTRACEのログを出力する方法を記載します。
開発の序盤でアプリのDEBUGログがeclipseのコンソールやログファイルに出力されず、困る場合があるので、メモとして残しました。
前提
- Windows環境での設定を前提とします。
(本番の実行環境はLinuxがほとんどですが、開発環境としてはWindowsが多いため。) - 対象のサーバはJBoss Application Server 7.1(EAP7.1)をとします。Wildflyでも同様と思われます。
- 開発アプリではmaven(pom.xml)を使用する前提です。
- 次のようにロギングAPIであるslf4jを使ってロギングする前提の手順となります。
package mycorp.myapp.view; ... import org.slf4j.Logger; import org.slf4j.LoggerFactory; ... public class HelloWorld { private Logger logger = LoggerFactory.getLogger(getClass()); public void init() { logger.debug("test!"); } ...
設定手順
slf4jを使用するために次のようにアプリのpom.xmlにslf4jの依存関係を追加します。使用するバージョンは適宜修正してください。
なお、EAP7の場合はslf4jに対してjboss loggerがバインドされるので、log4jやlogback等のロギング実装を指定する必要はありません。
<project ...>
...
<dependencies>
...
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
...
</dependencies>
...
</project>ログの出力元となるアプリのログレベルや、ログの出力先となるハンドラのログレベルを変更します。
jboss-eap-7.1\standalone\configurationにあるstandalone.xmlを開き、次のように修正します。
...
<subsystem xmlns="urn:jboss:domain:logging:3.0">
<console-handler name="CONSOLE">
<level name="TRACE"/>
...
</console-handler>
<periodic-rotating-file-handler name="FILE" autoflush="true">
<level name="TRACE"/>
...
</periodic-rotating-file-handler>
<logger category="com.arjuna">
<level name="WARN"/>
</logger>
...
<logger category="mycorp">
<level name="DEBUG"/>
</logger>
<logger category="mycorp.fw.listener">
<level name="TRACE"/>
</logger>
...
<root-logger>
<level name="INFO"/>
<handlers>
<handler name="CONSOLE"/>
<handler name="FILE"/>
</handlers>
</root-logger>
...
</subsystem>
...- 特に断りのないもの(ログ出力元=ロガー)はroot-loggerで指定したログレベル(INFO)未満は出力されない。(23行目)
- 開発対象となるアプリではDEBUGレベルで出力したいので、アプリのロガー(この例ではmycorp)を個別に指定する。(16行目)
アプリの中でも詳細にログを確認したいものは個別にTRACEを指定する。(19行目) - ハンドラ側(ログ出力先)でもログレベルによるフィルタがかかるので、これも下げる必要がある。(4, 8行目)