Java 使用WebLogic和Log4j交织事件

Java 使用WebLogic和Log4j交织事件,java,log4j,weblogic,Java,Log4j,Weblogic,我在Struts应用程序中使用WebLogic和Log4j。由于Action类不是线程安全的,所以我假设Action类由WebLogic缓存,并用于每个HTTP请求 在这种情况下,如果有多个客户端访问同一个Action类,我假设Log4j打印的事件将通过多个请求输出 日志信息不是连续的,很难解释 我如何解决这些问题?首先,我想修正一下您问题中的一些术语用法。Struts是一个MVC框架。Weblogic是一个JavaEE容器。操作功能和生命周期不依赖于容器。这只是Struts的功能 您是对的,因

我在Struts应用程序中使用WebLogic和Log4j。由于Action类不是线程安全的,所以我假设Action类由WebLogic缓存,并用于每个HTTP请求

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

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


我如何解决这些问题?

首先,我想修正一下您问题中的一些术语用法。Struts是一个MVC框架。Weblogic是一个JavaEE容器。
操作
功能和生命周期不依赖于容器。这只是Struts的功能

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

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

下面是导致log4j打印线程名称的
布局
配置示例:

           <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]
完成这项工作。

还有其他更有效的多线程日志记录方法吗?