Pregunta

Yo uso log4j y que funciona muy bien. Un archivo log4j.xml está en mi ruta de clases, yo uso appender y categoría ... otra vez, es un trabajo muy bien para mi código o código de otra librairy.

Pero las clases de primavera continúan a la salida estándar de inundación con el mensaje que desea iniciar sesión en otro lugar. Se BEGGIN que se evitará.

mensaje ofensivo: org.springframework.jms: algún error .... De manera más general, todas las clases del paquete Enviar mensaje org.springframework a la salida estándar.

Así que puse esto en mi 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 un trabajo con otra Librairie. ¿Por qué no la primavera?

hago un poco de investigación, y de appeart que el uso común de primavera-memoria y no log4j. Es que una posible causa? Cualquier solución?

He tratar de añadir un log4jConfigurationListener a mi web.xml. él está trabajando pero Stil no tiene ningún control sobre el mensaje de error 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>

Editar:

Algunos más información:

  • i utilizar Tomcat 5.5
  • a log4j.property (antiguo log4j config) todavía está presente por razones históricas. I'v tratar de retirarlo => ningún cambio.

EDIT 2: Yo uso la siguiente solución, pero no estoy contento con él: no es configurable

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

No hay solución correcta

Otros consejos

Tenga en cuenta que en las muestras de primavera que están utilizando slf4j a los mensajes de registro de ruta de los Comunes registro de log4j. En pom.xml de Maven se ve de esta manera:

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

Es posible que necesite:

<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 utiliza Apache Commons Logging, que a su vez decide si usar STDOUT (a través de java.util.logging) o Log4j. Si usted está recibiendo la salida del resorte en la salida estándar, a continuación, commons-logging no ha localizado log4j por alguna razón.

Si se establece la propiedad del sistema org.apache.commons.logging.diagnostics.dest, commons-logging puede ser configurado para registrar sus diagnósticos, que le dice qué medidas está tomando para determinar en log4j está presente.

Así que en la secuencia de comandos de inicio de Tomcat, establece la propiedad del sistema, por ejemplo.

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

Debe utilizar SLF4J, e incluyen el puente a la plataforma de registro deseado (log4j) pero hay que también excluir commons-logging de todos los otros lugares que podrían ser arrastradas en. Es útil tener un IDE para hacer esto, o puede poner una entrada falsa en para commons-logging. Para más detalles al respecto, consulte el SLF4J FAQ

Una respuesta anterior mencionó el uso de los artefactos com.springsource, sin embargo si está utilizando Maven Central de la manera correcta de hacerlo es:

<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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top