我用log4j和他的工作就好了。一个log4j.xml 文件在我的类路径,使用存放器和类别的...再次,它工作得很好我的代码或代码的其他librairy.

但是弹簧类继续洪水stdout有消息我要记录的其他地方。它开始是烦人.

违规的信息:org.springframework.jms:一些错误。...更一般地说,所有类别的组织。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>

它的工作与其他图书馆.为什么不?

我做了一些研究,这是appeart春天使用公共记录,而不log4j.这是一个可能的原因?任何解决方法?

我已经尝试增加一个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>

编辑:

一些更多的信息:

  • 我用Tomcat5.5
  • 一log4j.酒店(老log4j config)仍然存在于历史原因。我心中已经尝试移除它=>没有改变。

编辑2:我用以下解决方法,但我不快乐:这是不可配置

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

没有正确的解决方案

其他提示

注意到在春天的样品他们使用的slf4j路线登录的消息从公共记录到log4j.在家的 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>

春天使用Apache议院的日志记录,这反过来决定是否使用STDOUT(通过 java.util.logging)或Log4j.如果你是在弹簧上的输出标准输出,然后,公共记录并没有位于log4j因为某些原因。

如果你设置的系统酒店 org.apache.commons.logging.diagnostics.dest,公共记录可构成登录其诊断,告诉你什么步骤,它是把以确定在log4j是存在的。

因此,在tomcat启动脚本,设置系统的财产,例如

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

你必须使用SLF4J,包括桥梁,伐木平台你想要的(log4j)但是你必须 排除公共记录的所有其他地方,它可能拉。它有助于有IDE要做到这一点,或者你可以把假条对于公共记录。详细信息,请参阅 SLF4J FAQ entry

先前的答复提到使用com.、基于容器的架构、文物,但是如果您使用的是专家中心正确的方式做到这一点是:

<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