簡體   English   中英

log4j 屬性 BurstFilter 配置

[英]log4j properties BurstFilter configuration

我正在嘗試使用log4j.properties格式為一個特定的 Appender 配置 BurstFilter。 log4j 的版本是 1 和 Apache Kafka 不幸的是還沒有支持或 log4j2。 https://home.apache.org/~dongjin/post/apache-kafka-log4j2-support/

我無法在互聯網上找到 Burstfilter 的任何.properties格式示例。

這是我配置的第一部分。 我想在哪里添加 BurstFilter。 這種配置效果很好。

log4j.rootLogger=INFO, graylog2
log4j.logger.org.reflections=ERROR

log4j.appender.graylog2=org.graylog2.log.GelfAppender
log4j.appender.graylog2.graylogHost=1.1.1.1
log4j.appender.graylog2.graylogPort=12201
log4j.appender.graylog2.originHost=my-hostname
log4j.appender.graylog2.facility=gelf-java
log4j.appender.graylog2.layout=org.apache.log4j.PatternLayout
log4j.appender.graylog2.layout.ConversionPattern=%d{ISO8601} %-5p  %X{dbz.connectorType}|%X{dbz.connectorName}|%X{dbz.connectorContext}  %m   [%c]%n
log4j.appender.graylog2.extractStacktrace=true
log4j.appender.graylog2.addExtendedInformation=true
log4j.appender.graylog2.additionalFields={'hostname': 'my-hostname'}

我想補充的是:

log4j.appender.graylog2.filter=org.apache.logging.log4j.core.filter.BurstFilter
log4j.appender.graylog2.filter.level=INFO
log4j.appender.graylog2.filter.rate=16
log4j.appender.graylog2.filter.maxBurst=100

but when I use some properties to XML converter such as http://logback.qos.ch/translator/ I'm not able to get the desired outcome as seen here: https://logging.apache.org/log4j/2 .x/manual/filters.html

我還沒有真正嘗試在我的 Java 服務器上使用此配置,我想避免試錯法。 任何幫助表示贊賞。

嗯,您的第一個屬性文件示例適用於 Log4j 1,而不是 Log4j 2。如果它正在工作,則意味着您仍在使用 Z7CF7986F63A2746F6C4529B81862526D。 既然你沒有提到它,我懷疑是這樣的。 如果您確實在使用 Log4j 1 並且不想使用 Log4j 2 那么您將不得不自己重新實現 Z7CF7986F63A2746F6C4529B81862526 的 BurstFilter。 Log4j 1 已於 2015 年 8 月結束生命周期,報告了幾個永遠無法修復的安全漏洞,並且在 Java 9+ 中存在與檢測 JDK 版本有關的錯誤,該版本也將永遠無法修復。

如果您確實想使用 Log4j 2 和 BurstFilter,請繼續閱讀,否則請在此處停止。

您是否有理由要使用屬性而不是 XML、JSON 或 YAML? 雖然我添加了對 Log4j 2 的屬性支持,但我真的不喜歡它。 Log4j 的配置確實是一個層次結構,很容易用 XML、JSON 或 YAML 表示。 用屬性模擬層次結構感覺很麻煩。

翻譯時最簡單的做法是查看 XML 並意識到每個屬性和元素都必須表示為子屬性。 所以在下面你會看到突發過濾器的屬性都必須出現在 appender.StdOut.filter.burst 下,以便可以使用名為 StdOut 的 Appender 和 BurstFilter 來標識該屬性,其屬性都分組在“burst 元素”下”。

appender.Stdout.type = Console
appender.Stdout.name = StdOut
appender.Stdout.target = SYSTEM_OUT
appender.Stdout.layout.type = PatternLayout
appender.Stdout.layout.pattern = %d [%t] %-5level: %msg%n%throwable
appender.Stdout.filter.burst.type = BurstFilter
appender.Stdout.filter.burst.onMatch = DENY
appender.Stdout.filter.burst.onMisMatch = NEUTRAL
appender.Stdout.filter.burst.level = INFO
appender.Stdout.filter.burst.rate = 16
appender.Stdout.filter.burst.maxBurst = 100

相比之下,XML 將是

<Console name="StdOut" target="SYSTEM_OUT">
  <PatternLayout pattern="%d [%t] %-5level: %msg%n%throwable"/>
  <BurstFilter level="INFO" rate="16" maxBurst="100" onMatch="DENY" onMisMatch="NEUTRAL"/>
</Console>

我也可以將它與 JSON 和 YAML 進行比較,但希望你明白這一點。 屬性格式更長,IMO 更難理解。 綜上所述,如果您的應用程序中沒有 XML 或 JSON 或 YAML 庫,那么使用屬性將始終有效。

暫無
暫無

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

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