【发布时间】:2014-07-05 12:49:39
【问题描述】:
不确定我缺少什么,尝试在我的 JBoss Spring 应用程序中实现 Log4J 日志记录,如下所述: Hibernate logging in Spring application on JBoss 7.1
但它似乎并没有选择我在我定义的配置 webapp/WEB-INF/classes/log4j.properties
pom.xml:
<properties>
<org.slf4j-version>1.7.5</org.slf4j-version>
</properties>
<!-- Logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
<exclusions>
<!-- Exclude Commons Logging in favor of SLF4j -->
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
META-INF/jboss-deployment-structure.xml:
<jboss-deployment-structure>
<deployment>
<exclusions>
<module name="org.apache.log4j" />
<module name="org.slf4j" />
<module name="org.slf4j.impl" />
</exclusions>
</deployment>
</jboss-deployment-structure>
WEB-INF/classes/log4j.properties:
log4j.rootLogger=INFO, A1, R
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.Target=System.out
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log
log4j.appender.R.MaxFileSize=100KB
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
log4j.logger.org.hibernate.SQL=DEBUG
log4j.logger.org.hibernate.type=TRACE
log4j.logger.org.hibernate=DEBUG
log4j.logger.com.bagel=INFO
TestController.java:
package com.bagel.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Controller
public class TestController {
private final static Logger LOGGER = LoggerFactory.getLogger(TestController.class.getName());
@RequestMapping("/test")
public void test(){
LOGGER.info("Test Logging");
}
}
而且我确信我的 Controller 方法测试正在被调用,但是它没有记录所需的“测试记录”
【问题讨论】:
-
如果您使用的是 slf4j,是否有理由使用 log4j?
-
嗨 James SLF4J 只是一个界面。它需要在运行时进行底层实现,例如:java.util.logging、logback、log4j 等。这允许您在需要时切换实际实现。
-
是的,这就是我问这个问题的原因 :) 服务器将为您处理日志配置,因此没有理由使用像 log4j 这样的额外日志管理器。
-
即使在将记录器类别添加到standalone.xml 之后,服务器日志也没有显示任何内容。因此我认为我需要明确定义实现。
-
不确定可能是什么,但我之前听说过 Spring 的问题。我不知道 Spring 做了什么来配置日志记录,但我认为它试图做一些事情。