工作log4j config忽略通过春天的课程
题
我用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>