我的战争中有以下 pom.xml :
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<scope>provided</scope>
</dependency>
和我的 log4j.properties 如下:
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
# Root logger option
log4j.rootLogger=DEBUG, stdout
# Hibernate logging options (INFO only shows startup messages)
log4j.logger.org.hibernate=INFO
# Log JDBC bind parameter runtime arguments
log4j.logger.org.hibernate.type=TRACE
问题是当我将 log4j.properties 放在src / main / resources中时,它不会在控制台上打印任何内容。 如果我从上面的目录中删除log4j.properties,则会打印 info log。
发生了什么事?
答案 0 :(得分:2)
EAP 6有自己的日志记录子系统,名为JBoss LogManager,&#34;鼓励&#34;你可以通过为log4j slf4j提供一个模拟.jar以及一些更多的日志框架来使用它。这些模拟.jars将在运行时位于您的类路径中。它们基本上将所有日志消息转发到在standalone.xml的日志记录子系统中配置的JBoss LogManager。
我实际上喜欢这种方法,因为它将所有日志记录配置统一在一个地方。顺便打包log4j.properties可能会消除在运行时更改日志记录配置的选项。
如果你仍想使用真正的log4j,你将不得不做一些工作:
org.jboss.as.logging.per-deployment=false
编辑:jboss-deployment-structure.xml可能如下所示:
<jboss-deployment-structure>
<deployment>
<exclusions>
<module name="org.apache.log4j" />
<module name="org.slf4j" />
</exclusions>
</deployment>
</jboss-deployment-structure>
如果你有耳朵,你可能还必须为每个子部署排除这些。