使用WebLogic和Log4j交织事件

时间:2013-07-07 10:38:07

标签: java log4j weblogic

我正在为我的Struts应用程序使用WebLogic和Log4j。由于Action类不是线程安全的,我假设Web类缓存了Action类并重新用于每个HTTP请求。

在这种情况下,如果有多个客户端访问同一个Action类,我假设Log4j打印的事件将由多个请求输出。

日志信息不是连续的,也很难解释。

如何解决此类问题?

1 个答案:

答案 0 :(得分:1)

首先,我想在您的问题中修复一些术语用法。 Struts是一个MVC框架。 Weblogic是一个Java EE容器。 Action功能和生命周期不依赖于容器。它只是Struts的功能。

你是对的,因为Action的实例是根据请求创建的,你的日志将包含由不同操作创建的日志消息的混合。

通常使用的解决方案是将线程名称打印到日志中(log4j支持此配置),然后在unix上使用grep命令或在Windows上使用find来仅过滤相关消息。

以下是导致log4j打印线程名称的layout配置示例:

           <layout class="org.apache.log4j.EnhancedPatternLayout">
                    <param name="ConversionPattern" value="%-5p %-23d{ISO8601}{GMT} [%t] %x: %c{1}(%C{1}.%M:%L) - %m%n"/>
            </layout>

[%t]完成这项工作。