logging - Wildfly 8 日志记录 - 多个部署的每个部署配置不起作用

标签 logging wildfly wildfly-8

我需要在 wildfly 域中的服务器组上部署多个 war 文件。当我仅部署一个应用程序时,配置工作得很好,并且日志按预期生成。但是,部署第二个 war 文件后,部署一和部署二的所有日志都会写入第二个部署的日志文件中。这似乎是 Wildfly 每个部署日志记录中的一个错误。有什么建议吗?

我已经在 log4j.xml 中配置了 RollingFileAppender。

日志配置:App1

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
<appender name="logFile" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="${jboss.server.log.dir}/deploy1.log" />
    <param name="Append" value="true" />
    <param name="Threshold" value="TRACE" />
    <param name="MaxFileSize" value="25MB" />
    <param name="MaxBackupIndex" value="30" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" 
            value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
    </layout>
</appender>
<logger name="com.akash.deploy1">
    <level value="DEBUG" />
</logger>
<root>
    <level value="INFO" />
    <appender-ref ref="logFile" />
</root>
</log4j:configuration>

日志配置:App2

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
    <appender name="logFile" class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="${jboss.server.log.dir}/deploy2.log" />
        <param name="Append" value="true" />
        <param name="Threshold" value="TRACE" />
        <param name="MaxFileSize" value="25MB" />
        <param name="MaxBackupIndex" value="30" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" 
                value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
        </layout>
    </appender>
    <logger name="com.akash.deploy2">
        <level value="DEBUG" />
    </logger>
    <root>
        <level value="INFO" />
        <appender-ref ref="logFile" />
    </root>
</log4j:configuration>

域配置

<add-logging-api-dependencies value="false"/>

jboss-部署结构

    <jboss-deployment-structure>
    <deployment>
        <exclusions>
            <!-- Exclude container version of hibernate. By default its version 4, we want
                bundled version 3 loaded -->
            <module name="org.hibernate" slot="main" />
            <module name="org.hibernate.validator" />
            <module name="org.hibernate.validator.cdi" slot="main" />
        </exclusions>
        <dependencies>
            <module name="org.apache.commons.logging" />
            <module name="org.apache.commons.collections" />
            <module name="org.dom4j" />
            <module name="org.apache.log4j" />
            <module name="org.slf4j" />
            <module name="org.apache.camel" />
            <module name="org.springframework" />
            <module name="org.hibernate" slot="3.6.10" />
            <module name="net.sf.ehcache" />
            <module name="org.jboss.as.jmx" />
            <module name="org.apache.xerces" />
            <module name="asm.asm" />
            <module name="org.jboss.msc" />
            <module name="org.wildfly.clustering.singleton" />
            <module name="org.jboss.as.server" />
            <module name="com.oracle.ojdbc7" />
            <module name="org.wildfly.clustering.server"/>
        </dependencies>
        <exclude-subsystems>
            <subsystem name="logging" />
        </exclude-subsystems>
    </deployment>
</jboss-deployment-structure>

最佳答案

每次部署日志记录基于日志上下文工作。由于您在 jboss-deployment-structure.xml 中排除了日志记录子系统两个部署使用相同的日志上下文。

要使其按预期工作,您需要设置 add-logging-api-dependencies返回true 。在 CLI 中:

/profile=default/subsystem=logging:write-attribute(name=add-logging-api-dependencies, value=true)

然后在你的jboss-deployment-structure.xml中删除日志子系统的排除。您还可以删除 3 个日志记录,因为它们应该会自动添加。

<jboss-deployment-structure>
    <deployment>
        <exclusions>
            <!-- Exclude container version of hibernate. By default its version 4, we want
                bundled version 3 loaded -->
            <module name="org.hibernate" slot="main" />
            <module name="org.hibernate.validator" />
            <module name="org.hibernate.validator.cdi" slot="main" />
        </exclusions>
        <dependencies>
            <module name="org.apache.commons.collections" />
            <module name="org.dom4j" />
            <module name="org.apache.camel" />
            <module name="org.springframework" />
            <module name="org.hibernate" slot="3.6.10" />
            <module name="net.sf.ehcache" />
            <module name="org.jboss.as.jmx" />
            <module name="org.apache.xerces" />
            <module name="asm.asm" />
            <module name="org.jboss.msc" />
            <module name="org.wildfly.clustering.singleton" />
            <module name="org.jboss.as.server" />
            <module name="com.oracle.ojdbc7" />
            <module name="org.wildfly.clustering.server"/>
        </dependencies>
    </deployment>
</jboss-deployment-structure>

其中一些模块依赖项看起来也有点可疑。我不知道为什么你需要 org.jboss.as.jmx , org.jboss.msc , org.wildfly.clustering.singleton , org.jboss.as.serverorg.wildfly.clusttering.server .

关于logging - Wildfly 8 日志记录 - 多个部署的每个部署配置不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35411977/

相关文章:

java - 为什么 log4j 消息会产生 UTC 时间戳?

python - 自 2.5 版以来日志记录的变化

mysql - MySQL 中的 log-queries-not-using-indexes 和 LIKE

java - Kettle在java函数中启动改变系统属性

java - Wildfly 9 的standalone.xml 文件中的host 标记中的default-web-module 属性的用途是什么?

java - Wildfly 8.2 : importing wildcard certificate, 中间证书丢失

c# - 城堡记录设施

java - 将特定领域的对象传递给 jBPM 6 工作台中的特定领域任务

java - 我如何取消部署 WildFly 中的所有工件?

java - 运行standalone.bat时,wildfly在设置java属性时停止