【发布时间】:2017-07-19 09:11:25
【问题描述】:
我在 weblogic 中部署了一个耳朵,其中 log4j2.xml logPath 设置为
<Property name="logPath">some_path_1<Property>
和一个定义为
的记录器<Logger name="a.b.c.d" level="INFO" />
在这个 ear/lib 中有一个包含 log4j2.xml 的 jar,logPath 属性定义为
<Property name="logPath">some_path_2<Property>
和一个封装结构非常相似的logger
<Logger name="a.b.c" level="INFO" />
两个 log4j2.xml 也被配置为具有不同的日志文件名。 但是两者的日志都来自路径 some_path_2 和该 jar 中定义的文件名
如何确保两个日志输出按照定义分别发生?
我的耳朵结构是这样的
ear
|--lib
|--|--abc.jar
|--|--|--log4j2.xml //the one thats getting loaded
|--xyz.war
|--|--WEB-INF
|--|--|--classes
|--|--|--|--log4j2.xml // the one I want
Edit1:我在包含战争的 web.xml 中添加了以下内容,但没有帮助
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j2.xml</param-value>
</context-param>
Edit2:我也试过了,发现这是间歇性工作
ear
|--lib
|--|--abc.jar
|--|--|--log4j2.xml //the one thats getting loaded
|--|--xyz.jar
|--|--|--log4j2.xml //the one I want.. works but not always.Does classloader loads the jars alphabetically?
|--xyz.war
|--|--WEB-INF
|--|--|--classes
|--|--|--|--log4j2.xml // the one I want
【问题讨论】:
-
我认为你让 log4j2 模块在类路径中搜索 log4j2 配置文件。因此,根据哪个 jar,首先加载目录,然后加载配置文件。潜在地,您可以将
-Dlog4j.configurationFile=path/to/log4j2.xml作为参数。如果这不可能,以编程方式让 log4j 在特定路径中查找。 -
"如何确保两个日志输出按照定义分别发生?"不支持多个配置文件。您必须手动合并配置,然后您需要指定 log4j2.xml 以与 @Andrews 建议的属性一起使用,或者您必须确保类路径中只有一个 log4j2.xml。
标签: java logging log4j log4j2 weblogic12c