Wildfly未选择log4j2.xml配置文件,日志记录不工作

8tntrjer  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(268)

我已经将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>
xdyibdwo

xdyibdwo1#

您提供的配置在我看来是正确的。您需要确保jboss-deployment-structure.xml位于每个WAR的WAR/WEB-INF目录中。
也就是说,在3个不同的WAR文件中使用相同的log4j配置是一个坏主意。日志管理器不会共享写入器,因此您将打开3个写入器来写入同一个文件。这不是一个好主意,因为结果是不可预测的。您可能会得到混合的日志消息。
一个选择是不使用log42,而在WildFly中使用logging-profile。这将允许您的WAR在使用单个写入器时登录到同一个文件。由于您使用slf4j作为您的日志外观,因此似乎不需要log4j2。在这种情况下,您也需要jboss-deployment-structure.xml

相关问题