簡體   English   中英

Log4j日志會降低應用程序性能嗎?

[英]Log4j logs decreases application performance?

日志記錄是否會降低應用程 以及如何限制在日志文件中打印顯示標簽日志?

例如。 我的日志文件有以下日志

[2012-06-20 15:52:06,290] org.displaytag.tags.TableTag isFirstIteration 684 - [data] first iteration=true (row number=1)
[2012-06-20 15:52:06,290] org.displaytag.tags.TableTag isFirstIteration 684 - [data] first iteration=true (row number=1)
[2012-06-20 15:52:06,290] org.displaytag.tags.TableTag isFirstIteration 684 - [data] first iteration=true (row number=1)
[2012-06-20 15:52:06,290] org.displaytag.tags.TableTag isFirstIteration 684 - [data] first iteration=true (row number=1)

為什么以上是在日志文件中?

log.properties文件

# Log4j configuration file.
 log4j.rootCategory=DEBUG, A1
 # Available levels are DEBUG, INFO, WARN, ERROR, FATAL

 #
 # A1 is a ConsoleAppender 
 #

log4j.appender.A1 = org.apache.log4j.RollingFileAppender
log4j.appender.A1.File = C:/LogInfo/logfile.log
log4j.appender.A1.MaxFileSize = 100MB
log4j.appender.A1.MaxBackupIndex=50
log4j.appender.A1.layout = org.apache.log4j.PatternLayout
log4j.appender.A1.append = true
log4j.appender.A1.layout.ConversionPattern = [%d] %C %M %L - %m%n
log4j.appender.A1.Threshold = DEBUG

如何停止(org.displaytag.tags.TableTag)這些日志打印在日志文件中

日志記錄是否會降低應用程

是。 它的作用取決於許多因素; 見下文。

以及如何限制在日志文件中打印顯示標簽日志?

通過更改日志記錄屬性中的ConversionPattern

為什么以上是在日志文件中?

因為:

  1. 代碼中的某個地方是使用該消息調用Logger方法(可能是debug(String)
  2. 您的日志記錄屬性將appender的日志記錄閾值設置為DEBUG。

為了提高性能:

  1. 更改ConversionPattern以使用更便宜的日期/時間格式,並且(更重要的是)避免使用'C','F','L'和'M',因為它們特別昂貴。
  2. 將日志記錄閾值更改為INFO或WARNING或ERROR以減少日志記錄量,
  3. Logger.debug(...)調用放在if語句中,該語句檢查是否啟用了調試日志記錄。 這樣可以節省在不需要的情況下組裝日志消息的成本; 在log4j中,在記錄改進性能之前檢查isDebugEnabled嗎?
  4. 對於log4j版本2(log4j2),在采用格式和參數的日志記錄方法上存在重載。 這些可以減少在禁用級別進行日志記錄時的開銷。
  5. 看一下logback。

您還可以在Logger級別限制日志Logger ...如log4j文檔中所述 事實上,該文檔回答了您提出的大多數問題,並且在日志記錄性能和日志記錄配置方面有很多詳細信息。

簡短回答:是的,它會降低應用程序性能,因為它會占用一些CPU周期和其他資源(內存等)。

另見這個問題: log4j性能

記錄可以是你cpu時間的30%或更多。 就抖動而言,它與GC延遲一樣大(且更經常)。

減少開銷的一種簡單方法是使用Pattern關閉記錄每條消息的位置。 在您的情況下,這是%C%M和%L,因為它必須采用堆棧跟蹤(entier堆棧)來獲取此信息。

是的他們這樣做。 這就是為什么你應該只記錄錯誤或必須絕對記錄的東西。 您還可以在調試通道中記錄有助於調試的信息,這樣就不會影響生產性能。

您可以像這樣限制垃圾日志。 將根記錄器設置為INFO,以便不會出現不必要的調試日志並填滿您的日志文件。

log4j.rootCategory=INFO, A1

如果您希望特定的類或包發出DEBUG日志,您可以這樣做。

log4j.logger.org.hibernate.event.def.DefaultLoadEventListener=DEBUG,A1

以上將從日志文件中的類DefaultLoadEventListener打印DEBUG級別日志以及其他INFO級別日志。

怎么樣?

log4j.category.org.displaytag.tags.TableTag=ERROR, A1

暫無
暫無

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

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