Domanda

Io uso log4j e lui funzionano bene. Un file log4j.xml è nel mio percorso di classe, io uso appender e categoria ... ancora una volta, è un lavoro proprio bene per il mio codice o il codice di altri librairy.

Ma le classi primavera continuano ad inondare stdout con il messaggio che voglio accedere altrove. E 'Beggin da anoying.

offendere messaggio: org.springframework.jms: un errore .... Più in generale, tutte le classi del pacchetto org.springframework trasmettono il messaggio stdout.

così ho messo questo nella mia 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>

E 'un lavoro con altri Librairie. Perché non molla?

faccio un po 'di ricerca, ed è appeart che la primavera uso comune-logging, e non log4j. E 'che una possibile causa? Qualsiasi soluzione?

Ho tenta di aggiungere un log4jConfigurationListener al mio web.xml. sta lavorando, ma io non stil avere alcun controllo sul messaggio di errore primavera.

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

Modifica:

Alcuni ulteriori informazioni:

  • io uso Tomcat 5.5
  • un log4j.property (vecchia log4j config) è ancora presente per la ragione storica. I'v cercare di rimuoverlo => nessun cambiamento.

EDIT 2: Io uso la seguente soluzione, ma non sono felice con lui: non è configurabile

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

Nessuna soluzione corretta

Altri suggerimenti

Si noti che nei campioni di primavera che stanno utilizzando slf4j di messaggi di log di rotta dai Comuni di log log4j. In pom.xml di Maven appare in questo modo:

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

Potrebbe essere necessario:

<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 usa Apache Commons Logging, che a sua volta decide se utilizzare STDOUT (via java.util.logging) o Log4j. Se stai ricevendo uscita di primavera su STDOUT, allora commons-logging non è situato log4j per qualche motivo.

Se si imposta la proprietà org.apache.commons.logging.diagnostics.dest sistema, commons-logging può essere configurato per registrare le sue diagnosi, che ti dice quali iniziative sta prendendo per determinare in log4j è presente.

Quindi nel tuo script di avvio Tomcat, impostare la proprietà di sistema, per esempio.

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

È necessario utilizzare SLF4J, e includono il ponte alla piattaforma di registrazione che si desidera (log4j), ma è necessario anche escludere commons-logging da tutti gli altri posti che potrebbe essere tirato. Aiuta a avere un IDE per fare questo, o si può mettere una voce fittizia a commons-logging. Per i dettagli su questo, vedere la SLF4J FAQ

Una risposta precedente menzionato utilizzando i manufatti com.springsource, se si utilizza Maven centrale il modo giusto per farlo è:

<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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top