0

Tomcat から JBoss に切り替えたばかりですが、最初の大きな問題は、JBoss にデプロイされた Web アプリケーションで独自の log4j.xml ファイルを準備できないことです。アプリケーションの起動時にはロードされません。ロギングがありますが、デフォルトの JBoss ロギング設定からのものです

最新の JBoss 7.2.0 では、log4j がそのまま使用できることがわかりました。しかし、それは私には当てはまりません。私はグーグルで調べたすべてのトリック/ヒント/ハックを試しました-そしてそれはとてもイライラしています.

プロジェクトのどこかに log4j.xml が必要です。理想的には、jboss サーバー ディレクトリ内の構成を変更したくありません。これは、ローカルだけでなく、他の環境 (openshift など) でも機能する必要があるためです。

pom.xml:

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
  <version>1.7.5</version>
  <scope>provided</scope>
</dependency>
<dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>1.2.17</version>
  <scope>provided</scope>
</dependency>

構造:

WEB-INF/classes/log4j.xml - JBoss が読み取ったかどうかをチェックするゴミデータが含まれています (このファイルをロードすると例外がスローされます)。このファイルを /resources, /, WEB-INF にもコピーしてみました。

WEB-INF/jboss-deployment-structure.xml

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
  <deployment>
    <dependencies>
      <module name="org.slf4j"/>
      <module name="org.apache.log4j" />
    </dependencies>
  </deployment>
</jboss-deployment-structure>

log4j ファイルをロードする外部ローダーが必要ですか?

更新 #1 WEB-INF/classes/log4j.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/' debug="true">
  <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
    </layout>
  </appender>
  <root>
    <priority value ="debug" />
    <appender-ref ref="STDOUT" />
  </root>
</log4j:configuration>

私のコードのどこかに:

private static final Logger log = LoggerFactory.getLogger(TaskResource.class);
...
log.debug("deubg");
4

3 に答える 3

3

なぜこれが JBoss でそれほど困難だったのかはわかりませんが、最終的にすべての構成を理解しました。(私は最初からとても親密でした)。

JBoss アプリケーションで独自の log4j.xml を使用するには、次の手順に従う必要があります。

  • log4j.xml を WEB-INF/classes に配置します
  • そのように jboss log4j を除外します。

WEB-INF/jboss-deployment-structure.xml:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
  <deployment>
    <exclusions>
      <module name="org.apache.log4j" />
    </exclusions>
  </deployment>
</jboss-deployment-structure>
  • log4j.jar を WEB-INF/lib にコピーします。
  • 提供された依存関係を設定する

pom.xml:

<dependency>
  <artifactId>log4j</artifactId>
  <groupId>log4j</groupId>
  <version>1.2.17</version>
  <scope>provided</scope>
</dependency>

コンソールにログが必要な場合は、次のように設定します。

-Dorg.jboss.as.logging.per-deployment=false
于 2013-09-29T16:53:04.760 に答える
1

WEB-INF/jboss-deployment-structure.xml ファイルに以下を追加してみてください。

<?xml version="1.0" encoding="UTF-8"?> 
<jboss-deployment-structure>
   <deployment>
     <exclusions>
       <module name="org.apache.log4j" />
     </exclusions>
   </deployment>
 </jboss-deployment-structure> 
于 2013-09-29T13:44:10.103 に答える
0

いいえ、アプリの CLASSPATH に log4j.xml が必要です。

JBossが読み取ったかどうかを確認するためのゴミデータが含まれています

私はこれを理解していません。動作する XML を CLASSPATH に入れようとしたが動作しなかったので、ゴミバージョンの方が良いと思ったということですか?

実物を WEB-INF/classes に入れて動作するか確認してください。

別のローダーは必要ありません。あなたは何か他の間違ったことをしています。それはただのロギングです。そんなに難しくありません。

多分これは助けることができます:

https://community.jboss.org/thread/171813?start=0&tstart=0&_sscc=t

于 2013-09-29T13:15:51.520 に答える