Skinny WAR的Log4j问题:日志合并到单个日志文件中,而不是写入单独的web应用程序日志文件中

Skinny WAR的Log4j问题:日志合并到单个日志文件中,而不是写入单独的web应用程序日志文件中,log4j,maven-3,websphere-7,maven-ear-plugin,Log4j,Maven 3,Websphere 7,Maven Ear Plugin,我正在使用Websphere7部署EAR文件。EAR文件包含两个不同的应用程序war文件,如App1、App2 我正在使用maven EAR插件作为skinny war构建我的应用程序EAR文件 . |-- META-INF | `-- application.xml |-- lib | -- jar1 | -- jar2 | -- jar3 | -- log4j.jar |-- App1-1.0.0.war | -- /WEB-INF/cl

我正在使用Websphere7部署EAR文件。EAR文件包含两个不同的应用程序war文件,如App1、App2

我正在使用maven EAR插件作为skinny war构建我的应用程序EAR文件

.
 |-- META-INF
 |   `-- application.xml
 |-- lib
 |    -- jar1
 |    -- jar2
 |    -- jar3
 |    -- log4j.jar
 |-- App1-1.0.0.war
 |     -- /WEB-INF/classes/App1-log4j.xml     |     
 `-- App2-1.0.0.war
 |     -- /WEB-INF/classes/App2-log4j.xml
不同战争的Web.xml配置

App1-1.0.0.war:Web.xml

<context-param>
            <param-name>log4jExposeWebAppRoot</param-name>
            <param-value>false</param-value>
    </context-param>

    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/classes/App1-log4j.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>
 <context-param>
                <param-name>log4jExposeWebAppRoot</param-name>
                <param-value>false</param-value>
        </context-param>

        <context-param>
            <param-name>log4jConfigLocation</param-name>
            <param-value>/WEB-INF/classes/App2-log4j.xml</param-value>
        </context-param>

        <listener>
            <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
        </listener>

log4jExposeWebAppRoot
错误的
log4jConfigLocation
/WEB-INF/classes/App1-log4j.xml
org.springframework.web.util.Log4jConfigListener
App2-1.0.0.war:Web.xml

<context-param>
            <param-name>log4jExposeWebAppRoot</param-name>
            <param-value>false</param-value>
    </context-param>

    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/classes/App1-log4j.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>
 <context-param>
                <param-name>log4jExposeWebAppRoot</param-name>
                <param-value>false</param-value>
        </context-param>

        <context-param>
            <param-name>log4jConfigLocation</param-name>
            <param-value>/WEB-INF/classes/App2-log4j.xml</param-value>
        </context-param>

        <listener>
            <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
        </listener>

log4jExposeWebAppRoot
错误的
log4jConfigLocation
/WEB-INF/classes/App2-log4j.xml
org.springframework.web.util.Log4jConfigListener
我面临着与日志记录相关的问题。在应用程序启动时正确创建两个不同的日志文件(app1.log和app2.log)。但是,不同应用程序的日志将成为单个日志文件


我遗漏了什么吗?有什么建议吗?

最后,我找到了这个问题的解决方案。要获得答案,请参阅以下链接

在实现此解决方案期间,我观察到所有类中的静态记录器变量都会导致日志合并问题。这是关于这个问题的很好的解释。读完这篇文章后,我不得不将所有静态记录器转换为类级实例变量

私有静态最终记录器=Logger.getLogger(MyApp.class)

私有最终记录器=Logger.getLogger(MyApp.class)

在完成上述更改之后,日志框架开始对我正常工作。现在,我可以看到我的所有日志文件都包含特定于web应用的日志

如果你想得到这个问题的详细分析。你可以参考这个