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