質問

私は log4j を使用していますが、正常に動作します。log4j.xml ファイルがクラスパスにあり、アペンダーとカテゴリを使用しています...繰り返しますが、私のコードでも他のライブラリのコードでも問題なく動作します。

しかし、春のクラスでは、他の場所に記録したいメッセージが標準出力に溢れ続けます。イライラし始めています。

問題のあるメッセージ:org.springframework.jms :何らかのエラー....より一般的には、org.springframework パッケージのすべてのクラスがメッセージを stdout に送信します。

それで私はこれを log4j.xml に入れました:

<appender name="JMS-ERROR" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="tms.logs.folder/tms.logs.files.prefix-jms-error.log"/>
    <param name="Append" value="true"/>
    <param name="MaxFileSize" value="1000KB"/>
    <param name="MaxBackupIndex" value="2"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="**DVIDEA** %d{dd.MM.yyyy HH:mm:ss} %c  %m%n"/>
    </layout>
    <filter class="org.apache.log4j.varia.LevelRangeFilter">
        <param name="LevelMin" value="DEBUG" />
        <param name="LevelMax" value="FATAL" />
    </filter>
</appender>


<category name="org.springframework.jms" additivity="false">
    <appender-ref ref="JMS-ERROR"/>
</category>

他の図書館との連携です。なぜ春ではないのですか?

調べてみると、Spring では log4j ではなく common-logging を使用しているようです。考えられる原因はそれですか?何か回避策はありますか?

log4jConfigurationListener を web.xml に追加しようとしました。彼は働いていますが、私はまだスプリングエラーメッセージを制御できません。

<context-param>
   <param-name>log4jConfigLocation</param-name>
   <param-value>classpath:log4j.xml</param-value>
</context-param>
<context-param>
   <param-name>log4jRefreshInterval</param-name>
   <param-value>10000</param-value>
</context-param>
<listener>
   <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

編集 :

さらに詳しい情報:

  • Tomcat 5.5を使用しています
  • log4j.property (古い log4j config ) は、歴史的な理由からまだ存在しています。削除してみました => 変化なし。

編集2:私は次の回避策を使用していますが、満足できません:設定可能ではありません

java.util.logging.Logger springLogger = Logger.getLogger("org.springframework.jms");
springLogger.setLevel(Level.OFF);

正しい解決策はありません

他のヒント

春のサンプルで、彼らはlog4jのへコモンズログからのルートログメッセージにSLF4Jを使用していることを

注。 Mavenのpom.xmlでは、それはこのようになります。

<!-- Exclude Commons Logging -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>org.springframework.context</artifactId>
    <version>${spring.version}</version>
    <exclusions>
        <!-- Exclude Commons Logging in favor of SLF4j -->
        <exclusion>
            <groupId>org.apache.commons</groupId>
            <artifactId>com.springsource.org.apache.commons.logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<!-- Add slf4j API -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>com.springsource.slf4j.api</artifactId>
    <version>${slf4j.version}</version>
</dependency>

<!-- Add Commons Logging -> slf4j bridge -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>com.springsource.slf4j.org.apache.commons.logging</artifactId>
    <version>${slf4j.version}</version>
    <scope>runtime</scope>
</dependency>

<!-- Add slf4j -> log4j bridge -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>com.springsource.slf4j.log4j</artifactId>
    <version>${slf4j.version}</version>
    <scope>runtime</scope>
</dependency>

あなたが必要な場合があります:

<bean id="log4jInitialization"
    class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
        <property name="targetClass"
            value="org.springframework.util.Log4jConfigurer" />
        <property name="targetMethod" value="initLogging" />
        <property name="arguments">
            <list>
                <value>conf/log4j.xml</value>
            </list>
        </property>
    </bean>

は春は、順番にSTDOUT(java.util.loggingを介して)またはLog4jのどちらを使用するかを決定するのApache Commonsのロギングを使用します。あなたはSTDOUTに春の出力を取得している場合は、コモン・ログが何らかの理由でのlog4jの場所に位置していません。

あなたは、システムのプロパティorg.apache.commons.logging.diagnostics.destを設定した場合は、

は、コモン・ログが存在している何log4jの中で決定するために取っている手順を告げる、その診断を記録するように設定することができます。

だからあなたのTomcatの起動スクリプトでは、システムプロパティを設定し、例えばます。

-Dorg.apache.commons.logging.diagnostics.dest=STDOUT

あなたはSLF4Jを使用し、必要なログプラットフォーム(log4jの)へのブリッジが含まれている必要がありますが、あなたがののそれはに引っ張られるかもしれない他のすべての場所からコモンズ・ロギングを除外する必要があります。それはするのに役立ちますこれを行うためのIDEを持っている、またはあなたはコモンズ・ロギング用にダミーのエントリを置くことができます。その詳細については、 SLF4J FAQエントリ

をご覧ください あなたはMavenの中央を使用している場合は、

前の答えはcom.springsourceの成果物を使用して言及した、しかし、それを行うための正しい方法はあります:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.10</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.10</version>
</dependency>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top