1

JBoss 6.1 デプロイメントで log4j アペンダーを使用したいと考えています。これを機能させるのに苦労したので、いくつかのテスト コードを書き、org.apache.log4j.Logger.getLogger(String) がタイプ org.jboss.logmanager.log4j.BridgeLogger のオブジェクトを返すことに注意しました。

したがって、2 つのオプションがあると考えました: (1) getLogger 呼び出しで JBoss BridgeLogger ではなく Apache log4j タイプを返すようにするか、(2) JBoss が何らかのブリッジングを行っていることを受け入れて、log4j アペンダーを使用するようにします。使用する必要があると書いています。

したがって、最初のオプションを試してください: Logger.getLogger() は LogManager.getLogger(String) に委譲します。

return getLoggerRepository().getLogger(String);

RepositorySelector は LogManager では静的であり、次のように設定されます。

Hierarchy h = new Hierarchy(new RootLogger((Level) Level.DEBUG));
repositorySelector = new DefaultRepositorySelector(h);

しかし、LogManager には setRepositorySelector があるため、JBoss 起動プロセスの何かが setRepositorySelector を呼び出しているという結論に達しました。そのため、テスト ロギング コードから setRepositorySelector を呼び出し (LogManager の静的初期化子と同様に DefaultRepositorySelector に設定)、返されるロガーのタイプを確認しましたが、タイプは org.jboss.logmanager.log4j のままです。ブリッジロガー!!

次に、2 番目のオプションに進みます。私が望むのは、log4j アペンダーを使用できるようにすることだけです。 deploy/jboss-logging.xml ファイルには、コメント アウトされた log4j アペンダーが多数含まれているため、それらをサポートする必要があると思います。したがって、次のように入れます。

<log4j-appender name="MYTEMPFILE" class="org.apache.log4j.RollingFileAppender">
    <error-manager>
        <only-once/>
    </error-manager>

    <level name="DEBUG"/>

    <properties>
        <property name="file">${jboss.server.home.dir}/log/serverx.log</property>
        <property name="maximumFileSize">20480000</property>
        <property name="maxBackupIndex">5</property>
    </properties>

    <formatter>
        <pattern-formatter pattern="%d %-5p [%c] (%t) %m%n"/>
    </formatter>

</log4j-appender>
<!-- tried this too
<logger category="com.myco">
   <level name="DEBUG"/>
   <handlers>
      <handler-ref name="MYTEMPFILE"/>
   </handlers>
</logger>
-->
...
<root-logger>
    <!-- Set the root logger priority via a system property, with a default value. -->
    <level name="${jboss.server.log.threshold:DEBUG}"/>
    <handlers>
        <handler-ref name="MYTEMPFILE"/>
        <handler-ref name="CONSOLE"/>
        <handler-ref name="FILE"/>
    </handlers>
</root-logger>

その変更により、serverx.log ファイルを取得できないだけでなく、server.log に何も書き込まれません (上記の変更なしで server.log が読み込まれます)。

jboss-deployment-structure.xml と log4j の依存関係の除外について多くのことを読みましたが、それが私の問題に関連しているかどうかを知るために何が議論されているかについて十分に理解していません。関係ないと思います。

関連すると思われるこのパッチをデプロイしようとしました: https://issues.jboss.org/browse/JBAS-8791でも 違いはありませんでした。

誰?

ありがとう、ポール

4

1 に答える 1

1

アプリケーションの log4j.jar が EAR または WAR 内に保持されていない場合に独自の log4j.xml を使用するには、次のことを行う必要があります。

  1. 環境変数を設定します:-Dlog4j.configuration=log4j.xml
  2. の特定の行にコメントする必要があります<jboss_home>\server\default\deployers\jboss-logging.deployer\META-INF\logmanager-jboss-beans.xml

    <bean name="JBossLog4jRepostiorySelector" class="org.jboss.logmanager.log4j.BridgeRepositorySelector" />

これがうまくいくことを願っています

于 2015-07-27T11:58:55.113 に答える