2016-11-07 26 views
3

私はJboss EAP 7.0.2で実行中のWebアプリケーションを持っています。私のアプリでは、ログにはLog4j2を使いたいと思っています。Log4j2とJboss EAP 7:例外ログ記録

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-展開するstructure.xml::だから、私は依存関係としてlog4j2log4j-slf4j-implを追加

<?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)。

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 

が、それは例外をログに記録しません:

また、私は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への書き込みがあります!

私が見るの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ファイルにログを記録するとしますか?

答えて

0

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

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

特定の種類の例外をキャッチする場合は、javax.ws.rs.ext.ExceptionMapperを使用して例外を記録し、それに対する応答を作成することができます。

+0

ありがとうございました。 私のアプリですべての例外をキャッチすることは私には魅力的ではありません。私が達成しようとしているのは、Log4j2のルーティングログ機能(Logbackで呼び出されるSiftingAppernder)を採用することです。私の理解から、デフォルトのロギング・サブシステムにはふるい分け機能はありません。だから、私にとって最良の選択肢は、Logbackをサーバーロギングフレームワークとして有効にすることです([here](http://blog.anotheria.net/devops/enable-logback-in-jboss/)のように、例)。そうですか? – 3biga

+0

これはWildFly自身にとってはうまくいくかもしれませんが、他の依存関係がlog4jまたはJULを使用している場合、それらのログメッセージをlogbackに送ることはできません。 –

+0

よろしくお願いします。 – 3biga

関連する問題