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

时间:2013-10-31 07:53:48

标签: log4j maven-3 websphere-7 maven-ear-plugin

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

我正在使用maven-ear-plugin构建我的应用程序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>

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/App2-log4j.xml</param-value>
        </context-param>

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

我面临与日志相关的问题。在应用程序启动时正确创建了两个不同的日志文件(app1.log和app2.log)。但是不同应用程序的日志将转到单个日志文件。

我错过了什么吗?有什么建议吗?

1 个答案:

答案 0 :(得分:0)

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

在实现此解决方案期间,我观察到所有类中的静态Logger变量导致了日志合并问题。 Here是关于这个问题的好解释。读完之后,我不得不将所有静态Logger转换为类级实例变量。

  

private static final Logger LOGGER = Logger.getLogger(MyApp.class);

  

private final Logger LOGGER = Logger.getLogger(MyApp.class);

完成上述更改后,日志框架开始正常运行。现在,我可以看到我的所有日​​志文件包含特定于Web应用程序的日志。

如果您想对此问题进行详细分析。您可以参考此post