我正在使用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)。但是不同应用程序的日志将转到单个日志文件。
我错过了什么吗?有什么建议吗?
答案 0 :(得分:0)
最后,我得到了解决这个问题的方法。要获得答案,请参阅以下链接。
在实现此解决方案期间,我观察到所有类中的静态Logger变量导致了日志合并问题。 Here是关于这个问题的好解释。读完之后,我不得不将所有静态Logger转换为类级实例变量。
这
private static final Logger LOGGER = Logger.getLogger(MyApp.class);
要
private final Logger LOGGER = Logger.getLogger(MyApp.class);
完成上述更改后,日志框架开始正常运行。现在,我可以看到我的所有日志文件包含特定于Web应用程序的日志。
如果您想对此问题进行详细分析。您可以参考此post。