我正在为我的Struts应用程序使用WebLogic和Log4j。由于Action类不是线程安全的,我假设Web类缓存了Action类并重新用于每个HTTP请求。
在这种情况下,如果有多个客户端访问同一个Action类,我假设Log4j打印的事件将由多个请求输出。
日志信息不是连续的,也很难解释。
如何解决此类问题?
答案 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]
完成这项工作。