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行目)