我正在为我的 Struts 应用程序使用 WebLogic 和 Log4j。由于 Action 类不是线程安全的,我假设 Action 类由 WebLogic 缓存并重新用于每个 HTTP 请求。
在这种情况下,如果有多个客户端访问同一个 Action 类,我假设 Log4j 打印的事件将由多个请求输出。
日志信息不会是连续的并且很难解释。
我该如何解决这些问题?
首先,我想修正您问题中的一些术语用法。Struts 是一个 MVC 框架。Weblogic 是一个 Java EE 容器。功能和生命周期Action
不依赖于容器。它只是 Struts 的功能。
你是对的,因为实例Action
是根据请求创建的,你的日志将包含由不同操作创建的日志消息的混合。
通常使用的解决方案是将线程名称打印到日志中(log4j 支持此配置),然后grep
在 unix 或find
windows 上使用命令仅过滤相关消息。
layout
这是导致 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]
做这项工作。