3

で Web アプリを実行していJboss EAP 7.0.2ます。私のアプリではLog4j2、ロギングに使用したいと考えています。そのため、依存関係としてと を追加log4j2しました。log4j-slf4j-impl

build.gradle

compile 'org.apache.logging.log4j:log4j-core:2.7'
compile 'org.apache.logging.log4j:log4j-api:2.7'
compile group: 'org.apache.logging.log4j', name: 'log4j-slf4j-impl', version: '2.7'

ファイルjboss-deployment-structure.xml を置きます:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <exclude-subsystems>
            <subsystem name="logging" />
        </exclude-subsystems>
        <exclusions>
            <module name="org.apache.commons.logging" />
            <module name="org.apache.log4j" />
            <module name="org.jboss.logging" />
            <module name="org.jboss.logging.jul-to-slf4j-stub" />
            <module name="org.jboss.logmanager" />
            <module name="org.jboss.logmanager.log4j" />
            <module name="org.slf4j" />
            <module name="org.slf4j.impl" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>

log4j2.xmlを作成しました (内容は省略しますが、ファイルlea.logにログを書き込みます)。

また、私はTestRestServiceを持っています

@Path("/test")
public class TestRestService {
    private Logger logger  = LogManager.getFormatterLogger(TestRestService.class);
    private org.slf4j.Logger slf4jLogger = LoggerFactory.getLogger(TestRestService.class);

    @GET
    @Path("/logger")
    public void testLogger() {
        logger.info("Log4j2 log");
        slf4jLogger.info("SLF4J log");
        throw new RuntimeException("Test");
    }
}

このテスト メソッドは次のように書き込みますlea.log

2016-11-07 15:25:37.673 [default task-7] INFO  ru.rshb.test.TestRestService - Log4j2 log
2016-11-07 15:25:37.673 [default task-7] INFO  ru.rshb.test.TestRestService - SLF4J log

しかし、例外は記録されません!

server.log に次のように表示されます。

2016-11-07 15:25:37,673 INFO  [stdout] (default task-7) INFO  - Log4j2 log

2016-11-07 15:25:37,673 INFO  [stdout] (default task-7) INFO  - SLF4J log

2016-11-07 15:25:37,674 ERROR [io.undertow.request] (default task-7) UT005023: Exception handling request to /lea-core/rest/test/logger: org.jboss.resteasy.spi.UnhandledException: java.lang.RuntimeException: Test
...

質問:

  1. アプリで発生したすべてのメッセージと例外を lea.log (log4j2 ログ ファイル) に転送するにはどうすればよいですか?
  2. デプロイメントからロギング・サブシステムを除外した場合でも、server.log ファイルにログを記録することになっていますか?
4

1 に答える 1

0

REST エンドポイントから例外をスローしていて、それを処理していません。したがって、サーバーはアプリケーションログ構成に記録できないユーザーに代わってそれを処理します。

ロギング サブシステムを除外すると、デプロイがロギング サブシステムによって処理されなくなります。(つまり、これらのモジュールの除外は必要ありません)。ただし、サーバー自体は引き続きログ サブシステムの構成を使用します。

特定のタイプの例外をキャッチしたい場合は、 を使用しjavax.ws.rs.ext.ExceptionMapperて例外をログに記録し、それに対する応答を作成できます。

于 2016-11-09T00:08:01.717 に答える