我需要使用LOG4J2 v2.1分别为2个Java EE应用程序EAR1和EAR2维护单独的日志文件EAR1.log和EAR2.log。通过互联网,我可以看到特定于LOG4J v1.x的帮助,但找不到任何LOG4J2。
EAR1(需要使用“EAR1-log4j2.xml”):
1. Web project “web1”
2. EJB project “ejb1”
3. Java project “java1”
4. Java project “java2”
5. Java project “java3”
EAR2(需要使用“EAR2-log4j2.xml”):
1. Web project “web2”
2. EJB project “ejb2”
3. Java project “java1” (same as above)
4. Java project “java2” (same as above)
5. Java project “java3” (same as above)
http://logging.apache.org/log4j/2.x/manual/migration.html http://logging.apache.org/log4j/2.x/manual/logsep.html
现在正在做什么: 我的log4j2.xml放在ApplicationServer类路径&成功为EAR的
编写单个日志我完成了为两个EAR维护单独日志文件的尝试: •修改web.xml仅将日志记录更改仅应用于Web项目 •我尝试了以下代码,但这仅适用于当前类
LoggerContext loggerCtx = Configurator.initialize("mrpst", null, PathOfMyLog4j2XmlPath );
Logger log = loggerCtx.getLogger("MyClassName");
我正在尝试通过单独编辑log4j2.xml来检查是否可以完成此要求(无需更改代码)。感谢是否可以提供文档链接或任何替代方法。
答案 0 :(得分:0)
我的建议是在您的日志事件中注入上下文,并使用记录器路由过滤该上下文,该路由器指向适当的appender。
在记录时:
String routeKey = SOME_FIELD_THAT_IDENTIFIES_CONTAINER;
ThreadContext.put( "myEARroute", routeKey );
在你的log4j2.xml配置中:
<Routing name="myEARroute">
<Routes pattern="$${ctx:myEARroute}">
<!-- if you forget to inject context, the routing key will be empty -->
<Route
key="$${ctx:myEARroute}"
ref="STDOUT" />
<Route
key="EAR1"
ref="myEAR1Appender" />
<Route
key="EAR2"
ref="myEAR2Appender" />
</Routes>
</Routing>
现在您只需要创建与您的appender名称匹配的appender:
<RollingRandomAccessFile
name="myEAR1Appender"
filename="logs/Ear1.log"
<!-- fill in the rest of your appender config, as desired -->
</RollingRandomAccessFile>
重复其他appender。