Frage

Ich benutze log4j und er gut funktionieren. Eine log4j.xml Datei in meinem Classpath ist, verwende ich appender und Kategorie ... wieder, es Arbeit gut für meinen Code oder Code anderen librairy.

Aber die Feder Klassen weiterhin mit Nachricht an Flut stdout ich an anderer Stelle anmelden möchten. Es ist beggin anoying werden.

problematische Nachricht: org.springframework.jms: einige Fehler .... Allgemeiner gesagt, nach stdout alle Klassen des org.springframework Paket Nachrichtens.

Also ich habe dies in meinem 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>

Es ist die Arbeit mit anderen librairie. Warum nicht Frühling?

ich einige der Forschung, und es ist appeart dass Frühling Verwendung Common-Protokollierung und nicht log4j. Es ist, dass eine mögliche Ursache? Jede Abhilfe?

Ich habe versuchen, eine log4jConfigurationListener meiner web.xml hinzuzufügen. er arbeitet, aber ich STIL keine Kontrolle über die Federfehlermeldung nicht haben.

<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>

Edit:

Einige weitere Informationen:

  • verwenden i Tomcat 5.5
  • a log4j.property (alte log4j config) noch vorhanden ist aus historischen Gründen. I'v versuchen, es zu entfernen => keine Änderung.

EDIT 2: Ich verwende die folgende Problemumgehung, aber ich bin nicht glücklich mit ihm: es ist nicht konfigurierbar

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

Keine korrekte Lösung

Andere Tipps

Beachten Sie, dass in den Federproben sind sie mit slf4j zu routen Log-Meldungen von Commons Logging log4j. In Maven pom.xml sieht es so aus:

<!-- 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>

Unter Umständen müssen Sie:

<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>

Spring verwendet Apache Commons Logging, was wiederum entscheidet, ob STDOUT zu verwenden (über java.util.logging) oder Log4j. Wenn Sie immer Frühling Ausgabe auf STDOUT, dann commons-logging log4j aus irgendeinem Grunde nicht gefunden hat.

Wenn Sie die Systemeigenschaft org.apache.commons.logging.diagnostics.dest gesetzt, commons-logging konfiguriert werden kann, seine Diagnose zu protokollieren, Sie sagen, welche Schritte sie in log4j zu bestimmen, nimmt vorhanden ist.

Also in Ihrem tomcat Startskript, die System-Eigenschaft festgelegt, z.

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

Sie müssen SLF4J verwenden, und schließen die Brücke zur Protokollierung Plattform (log4j) wollen, aber Sie müssen auch ausschließen commons-logging von allen anderen Orten in gezogen werden könnte. Es hilft, haben eine IDE, dies zu tun, oder Sie können in für commons-logging einen Dummy-Eintrag setzen. Nähere Informationen finden Sie auf, dass die SLF4J FAQ-Eintrag

Eine frühere Antwort erwähnt die com.springsource Artefakte verwenden, aber wenn Sie Maven Zentral den richtigen Weg verwenden, es zu tun ist:

<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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top