【问题标题】:Configure logging for Apache Beam and Kafka Client with SLF4j使用 SLF4j 为 Apache Beam 和 Kafka 客户端配置日志记录
【发布时间】:2020-06-27 13:08:09
【问题描述】:

我使用 Apache Beam 与 Kafka 客户端来处理我的数据,但 Kafka 客户端库会产生大量消息,因此它们在堆栈跟踪中确实很混乱,我该如何更改此包的日志级别?

依赖的版本:slf4jVersion=1.7.29apacheBeamVersion=2.18.0

我已将文件log4j.properties 添加到src/main/resources/,内容如下,但它似乎不起作用

log4j.rootLogger=WARN, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
log4j.logger.org.apache.kafka.clients.consumer.internals=ERROR

build.gradle

dependencies {
    implementation "org.apache.beam:beam-sdks-java-core:${apacheBeamVersion}"
    implementation "org.apache.beam:beam-runners-google-cloud-dataflow-java:${apacheBeamVersion}"
    implementation "org.apache.beam:beam-sdks-java-io-google-cloud-platform:${apacheBeamVersion}"
    implementation "org.apache.beam:beam-sdks-java-io-kafka:${apacheBeamVersion}"
    runtimeOnly "org.slf4j:slf4j-jdk14:${slf4jVersion}"
    ...
}

我想在我的日志中避免的日志消息:

INFO: [Consumer clientId=consumer-3, groupId=Reader-0_offset_consumer_1776081144_custom-group-group-local] Seeking to LATEST offset of partition custom-group-0
Mar 16, 2020 1:55:34 PM org.apache.kafka.clients.consumer.internals.SubscriptionState maybeSeekUnvalidated
INFO: [Consumer clientId=consumer-3, groupId=Reader-0_offset_consumer_1776081144_custom-group-group-local] Resetting offset for partition custom-group-0 to offset 9347.
Mar 16, 2020 1:55:35 PM org.apache.kafka.clients.consumer.internals.SubscriptionState lambda$requestOffsetReset$3
INFO: [Consumer clientId=consumer-3, groupId=Reader-0_offset_consumer_1776081144_custom-group-group-local] Seeking to LATEST offset of partition custom-group-0
Mar 16, 2020 1:55:35 PM org.apache.kafka.clients.consumer.internals.SubscriptionState maybeSeekUnvalidated
INFO: [Consumer clientId=consumer-3, groupId=Reader-0_offset_consumer_1776081144_custom-group-group-local] Resetting offset for partition custom-group-0 to offset 9347.
Mar 16, 2020 1:55:36 PM org.apache.kafka.clients.consumer.internals.SubscriptionState lambda$requestOffsetReset$3
INFO: [Consumer clientId=consumer-3, groupId=Reader-0_offset_consumer_1776081144_custom-group-group-local] Seeking to LATEST offset of partition custom-group-0
Mar 16, 2020 1:55:36 PM org.apache.kafka.clients.consumer.internals.SubscriptionState maybeSeekUnvalidated
INFO: [Consumer clientId=consumer-3, groupId=Reader-0_offset_consumer_1776081144_custom-group-group-local] Resetting offset for partition custom-group-0 to offset 9347.

【问题讨论】:

  • 至少匹配其他消息的日志格式
  • @cricket_007 好像pipeline的日志和kafka的日志不一样
  • 是的,但这并不意味着您不能更改格式(两者都不匹配您提供的文件)。我还建议使用 logback.xmllog4j2.xml,因为 log4j 1.x 已记录问题
  • @cricket_007 实际上我的尝试没有成功,没有任何 logback 和 log4j2 changed 能够改变日志级别
  • kafka-clients 依赖于 log4j,您必须将其从依赖项中排除。就像我说的那样,根据打印的时间戳,您清楚地看到的日志没有使用您显示的文件。

标签: apache-kafka log4j apache-beam slf4j-api


【解决方案1】:

你不应该使用 slf4j-jdk14,因为它有 java.util.logging 作为实现并且不会考虑 log4j2 配置。所以删除这个

runtimeOnly "org.slf4j:slf4j-jdk14:${slf4jVersion}"

为了使用 log4j2 配置,您需要一个 log4j2 实现。我用过

implementation "org.apache.logging.log4j:log4j-slf4j-impl:2.13.3"

如果你想像我一样使用yaml config,只需添加这两个依赖项

implementation "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.10.5"
implementation "com.fasterxml.jackson.core:jackson-databind:2.10.5"

在我的例子中,我的一个传递依赖项中有另一个 slf4j 实现,我必须排除它才能使其工作。让你知道。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 2017-05-06
    相关资源
    最近更新 更多