[英]Log4j in clustered environment
我正在將log4j用於在集群環境中運行的Web應用程序。 在少數情況下,某些進程(非特定)會丟失日志記錄。 我無法確定原因。 在單個服務器實例上運行時,它可以正常工作。 我正在使用每日滾動文件appender。 是否要添加/修改任何其他屬性? Async Appender會有幫助嗎? 對此有何解決方案?
編輯:以下是log4j XML以及我計划使用的AsyncAppender
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="true">
<appender name="appLog" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="/logs/app.log" />
<param name="DatePattern" value="'.'yyyy-MM-dd" />
<param name="Threshold" value="DEBUG" />
<param name="Append" value="true" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p (%F:%L) - %m%n" />
</layout>
</appender>
<appender name="async" class="org.apache.log4j.AsyncAppender">
<param name="BufferSize" value="256" />
<param name="LocationInfo" value="true"/>
<appender-ref ref="appLog" />
</appender>
<root>
<priority value="debug" />
<appender-ref ref="async" />
</root>
</log4j:configuration>
如果沒有附加Log4J配置,加上有關集群拓撲的一些信息,就不可能確切地知道,但是:如果配置Log4J與應用程序的不匹配之間存在不匹配,那么您所描述的內容很可能會發生配置為在群集中運行。
例如,如果兩個集群成員在同一台物理計算機上運行,並且您的應用程序在兩個實例中都使用了相同的Log4J配置文件,那么實際上,您有兩個不同的JVM一次登錄到同一個文件。 這不會很好。
一般來說,您應該避免兩個不同的類加載器寫入相同的物理文件的情況。
更新 (在附加log4j.xml
):假設您的群集服務器在同一台物理計算機上運行,您附加的配置最終會有多個log4j配置登錄到相同的物理文件(log4j“生活”在類加載器的上下文中,並且您在同一台物理計算機上有多個服務器 - 因此有多個類加載器。 這不起作用,因為兩個log4j“實例”沒有辦法將寫入同步到該文件中。
AsyncAppender
無法幫助您。 AsyncAppender
所做的就是它緩沖日志記錄請求,以便程序在實際寫入日志行之前獲得控制權。 它沒有解決將寫入同步到同一文件的問題。
有兩種方法可以解決它:
SocketAppender
。 所有日志記錄(來自所有服務器實例)最終都將通過網絡連接發送,服務器程序(由log4j提供)將收集它們並將它們寫入文件。 可在此處找到如何使用它的說明。 根據Isaac給出的建議,以避免兩個不同的類加載器/ jvm寫入同一個物理日志文件的情況:
有兩種方法可以解決它:
讓每個JVM登錄到不同的日志文件。 實際上,試一試並證明它有效
請改用SocketAppender。 所有日志記錄(來自所有服務器實例)最終都將通過網絡連接發送,服務器程序(由log4j提供)將收集它們並將它們寫入文件。 可在此處找到如何使用它的說明。
對於第1點,下面的方法可以工作:
采用:
<param name="File" value="${sys:log4j.logFile}" />
代替:
<param name="File" value="/logs/app.log" />
對於JVM1,設置JVM屬性:log4j.logFile = / logs / jvm1 /app.log
對於JVM2,設置JVM屬性:log4j.logFile = / logs / jvm2 /app.log
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.