簡體   English   中英

log4j的生產設置文件?

[英]Production settings file for log4j?

這是我當前的log4j設置文件。 這些設置是否適合生產使用,還是應該刪除/調整或更改? 我問,因為我的所有線程都因為log4j阻塞而被掛起。 我檢查了我的打開文件描述符,我只使用了113。

# ***** Set root logger level to WARN and its two appenders to stdout and R.
log4j.rootLogger=warn, stdout, R

# ***** stdout is set to be a ConsoleAppender.
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
# ***** stdout uses PatternLayout.
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# ***** Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

# ***** R is set to be a RollingFileAppender.
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=logs/myapp.log
# ***** Max file size is set to 100KB
log4j.appender.R.MaxFileSize=102400KB
# ***** Keep one backup file
log4j.appender.R.MaxBackupIndex=5
# ***** R uses PatternLayout.
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %d %c - %m%n


#set httpclient debug levels
log4j.logger.org.apache.component=ERROR,stdout 
log4j.logger.httpclient.wire=ERROR,stdout 
log4j.logger.org.apache.commons.httpclient=ERROR,stdout 
log4j.logger.org.apache.http.client.protocol=ERROR,stdout

更新***從我的所有線程添加線程轉儲樣本(100)

"pool-1-thread-5" - Thread t@25
   java.lang.Thread.State: BLOCKED on org.apache.log4j.spi.RootLogger@1d45a585 owned by: pool-1-thread-35
    at org.apache.log4j.Category.callAppenders(Category.java:201)
    at org.apache.log4j.Category.forcedLog(Category.java:388)
    at org.apache.log4j.Category.error(Category.java:302)

toString()生成嵌套日志記錄時,Log4j 1.2很容易出現死鎖

查看舊的仍然未解決的問題,例如Log4J可以創建死鎖條件(並 發包 捐贈)使用RollingFileAppender的死鎖

它還具有在嚴重並發負載下的性能消除鎖同步問題。 類別callAppenders同步導致java.lang.Thread.State:BLOCKED並將org.apache.log4j.Category移動到可重入讀/寫鎖

即使AsyncAppender也沒有過多的鎖定: AsyncAppender.doAppend()不需要同步,並且在1.2.15中由AsyncAppender和ThrowableInformation類引起的死鎖 還要注意AsyncAppender溢出

需要注意的是始終將根類別級別限制為至少INFO或更高。 這樣可以防止日志記錄調用獲取上述問題中提到的不必要的鎖。 僅僅限制appender閾值是不夠的,因為稍后會考慮它。 請參閱發布/訂閱類比說明

要回答有關閾值如何與類別交互的問題,基本上將其視為發布/訂閱。 類別設置記錄器發布的內容,閾值設置appender的訂閱級別。

如果需要,嵌套的興趣類別可以單獨給予較低的優先級。

您是否使用標准的private static final Logger logger = Logger.getLogger(Foo.class);為每個類創建一個Logger private static final Logger logger = Logger.getLogger(Foo.class); 其中Foo是聲明記錄器的類? 如果整個應用程序中只有1個Logger實例,那么如果有大量日志記錄可能存在爭用。

%F:%L具有嚴重的性能影響。 雖然我不知道它們是如何導致鎖定的,但我會考慮省略它們用於生產。

這看起來很正常。 我不明白這是如何導致log4j阻塞的。 也許您可以發布您的問題的線程轉儲?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM