2013-07-07 19 views
0

我正在爲我的Struts應用程序使用WebLogic和Log4j。由於Action類不是線程安全的,因此我假定Action類由WebLogic緩存並重用於每個HTTP請求。使用WebLogic和Log4j交織事件

在這種情況下,如果有多個客戶端訪問相同的Action類,我假設由Log4j打印的事件將通過多個請求輸出。

日誌信息將不連續,非常難以解釋。

如何解決此類問題?

回答

1

首先,我想解決您的問題中的一些術語用法。 Struts是一個MVC框架。 Weblogic是一個Java EE容器。 Action功能和生命週期不依賴於容器。這僅僅是Struts的功能。

你是對的,因爲Action的實例是根據請求創建的,你的日誌將包含由不同動作創建的日誌消息的混合。

通常使用的解決方案是將線程名稱打印到日誌中(log4j支持此配置),然後在窗口上使用unix或find上的grep命令來僅過濾相關消息。

這裏是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]做這項工作。

+0

是否還有其他更有效的多線程日誌記錄方法? – youcanlearnanything