我已经将log4j从1.2.7升级到log4j 2.12.4。我有三个WAR文件,我需要它们的所有日志我已经为每个WAR文件创建了log4j2.xml,并将其放在类路径“WEB-INF/classes/log4j 2”下,但日志记录不能按要求工作。即使文件在指定的路径(c:/logs/ABC.log)中根本没有创建(ABC.log)。
我使用Wildfly 9.0.2作为我的应用服务器。下面是我的POM文件对log4j 2的依赖关系:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.12.4</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
<version>2.12.4</version>
</dependency>
下面是我的log4j2.xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
<Console name="LogToConsole" target="SYSTEM_OUT">
<PatternLayout pattern="[%d{HH:mm:ss,SSS}] [%p] %c{1}:%L - %m%n"/>
</Console>
<RollingFile name="LogToRollingFile" fileName="c:/logs/ABC.log"
filePattern="c:/logs/ABC-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout>
<Pattern>[%d{HH:mm:ss,SSS}] [%p] %c{1}:%L - %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="500 KB"/>
</Policies>
<DefaultRolloverStrategy max="20"/>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="com.example" level="info" additivity="false">
<AppenderRef ref="LogToConsole"/>
<AppenderRef ref="LogToRollingFile"/>
</Logger>
</Logger>
<Logger name="org.jboss" level="error" additivity="false">
<AppenderRef ref="LogToConsole"/>
</Logger>
</Logger>
<Root level="error">
<AppenderRef ref="LogToConsole"/>
</Root>
</Loggers>
</Configuration>
还有一件事是,日志记录在控制台上工作正常,但对于文件,它根本不工作。
请指导我如何使log4j 2配置与Wildfly,使我可以得到所有三个WAR文件日志到一个单一的日志文件。任何帮助将不胜感激!
我尝试使用以下配置添加jboss-deployment-structure.xml,但也不起作用:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
<deployment>
<exclusions>
<module name="org.apache.commons.logging" />
<module name="org.apache.log4j" />
<module name="org.jboss.logging" />
<module name="org.jboss.logging.jul-to-slf4j-stub" />
<module name="org.jboss.logmanager" />
<module name="org.jboss.logmanager.log4j" />
<module name="org.slf4j" />
<module name="org.slf4j.impl" />
</exclusions>
</deployment>
</jboss-deployment-structure>
1条答案
按热度按时间xdyibdwo1#
您提供的配置在我看来是正确的。您需要确保
jboss-deployment-structure.xml
位于每个WAR的WAR/WEB-INF
目录中。也就是说,在3个不同的WAR文件中使用相同的log4j配置是一个坏主意。日志管理器不会共享写入器,因此您将打开3个写入器来写入同一个文件。这不是一个好主意,因为结果是不可预测的。您可能会得到混合的日志消息。
一个选择是不使用log42,而在WildFly中使用
logging-profile
。这将允许您的WAR在使用单个写入器时登录到同一个文件。由于您使用slf4j作为您的日志外观,因此似乎不需要log4j2。在这种情况下,您也不需要jboss-deployment-structure.xml
。