使用LOG4J2单独记录

时间:2015-02-05 14:22:04

标签: log4j2

我需要使用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来检查是否可以完成此要求(无需更改代码)。感谢是否可以提供文档链接或任何替代方法。

1 个答案:

答案 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。