gpt4 book ai didi

java - log4j 属性 BurstFilter 配置

转载 作者:行者123 更新时间:2023-12-05 04:50:55 24 4
gpt4 key购买 nike

我正在尝试使用 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

但是当我使用一些属性到 XML 转换器时,例如 http://logback.qos.ch/translator/我无法获得此处所见的预期结果:https://logging.apache.org/log4j/2.x/manual/filters.html

我还没有真正尝试过在我的 Java 服务器上使用这个配置,我想避免试错法。任何帮助表示赞赏。

最佳答案

嗯,您的第一个属性文件示例适用于 Log4j 1,而不是 Log4j 2。如果它正在运行,则意味着您仍在使用 Log4j 1 或处于兼容模式。既然你没有提到它,我怀疑是这样的。如果您确实在使用 Log4j 1 而不想使用 Log4j 2,那么您将不得不自己为 Log4j 1 重新实现 BurstFilter。 Log4j 1 于 2015 年 8 月停产,报告了一些永远不会修复的安全漏洞,并且在 Java 9+ 中有一个与检测 JDK 版本有关的错误也永远不会被修复。

如果您确实想使用 Log4j 2 和 BurstFilter,请继续阅读,否则请到此为止。

您是否有理由希望使用属性而不是 XML、JSON 或 YAML?尽管我添加了对 Log4j 2 的属性支持,但我真的不喜欢它。 Log4j 的配置实际上是一个层次结构,可以很容易地用 XML、JSON 或 YAML 表示。用属性模拟层次结构感觉很麻烦。

翻译时最简单的事情就是查看 XML 并意识到每个属性和元素都必须表示为子属性。所以在下面你会看到 burst 过滤器的属性都必须出现在 appender.StdOut.filter.burst 下,这样属性就可以用名为 StdOut 的 Appender 和 BurstFilter 来识别,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 库,那么使用属性将始终有效。

关于java - log4j 属性 BurstFilter 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67142714/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com