0
我正在爲我的Struts應用程序使用WebLogic和Log4j。由於Action類不是線程安全的,因此我假定Action類由WebLogic緩存並重用於每個HTTP請求。使用WebLogic和Log4j交織事件
在這種情況下,如果有多個客戶端訪問相同的Action類,我假設由Log4j打印的事件將通過多個請求輸出。
日誌信息將不連續,非常難以解釋。
如何解決此類問題?
我正在爲我的Struts應用程序使用WebLogic和Log4j。由於Action類不是線程安全的,因此我假定Action類由WebLogic緩存並重用於每個HTTP請求。使用WebLogic和Log4j交織事件
在這種情況下,如果有多個客戶端訪問相同的Action類,我假設由Log4j打印的事件將通過多個請求輸出。
日誌信息將不連續,非常難以解釋。
如何解決此類問題?
首先,我想解決您的問題中的一些術語用法。 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]
做這項工作。
是否還有其他更有效的多線程日誌記錄方法? – youcanlearnanything