JBoss EAP7でアプリのDEBUGやTRACEのログを出力する方法を記載します。
開発の序盤でアプリのDEBUGログがeclipseのコンソールやログファイルに出力されず、困る場合があるので、メモとして残しました。
前提
- Windows環境での設定を前提とします。
(本番の実行環境はLinuxがほとんどですが、開発環境としてはWindowsが多いため。) - 対象のサーバはJBoss Application Server 7.1(EAP7.1)をとします。Wildflyでも同様と思われます。
- 開発アプリではmaven(pom.xml)を使用する前提です。
- 次のようにロギングAPIであるslf4jを使ってロギングする前提の手順となります。12345678910111213package 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等のロギング実装を指定する必要はありません。
1 2 3 4 5 6 7 8 9 10 11 12 13 | <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を開き、次のように修正します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | ... <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行目)