java - 在 apache Kafka 中禁用 SLF4J 日志记录

标签 java apache-kafka slf4j kafka-producer-api

我在 Apache Kafka 上记录 SLF4J 时遇到问题。我想将 Tomcats Servlet Container Catalina 与 Apache Kafka 结合使用。我的 Java 应用程序必须集成到 Camunda 的 BPM 流程中。到目前为止,Java 编码的集成也有效 - 没有集成 Apache Kafka Producer。如果我将其集成到 Camunda 流程中,我会收到此错误:

java.lang.LinkageError: loader constraint violation: when resolving method "org.slf4j.impl.StaticLoggerBinder.getLoggerFactory()Lorg/slf4j/ILoggerFactory;" the class loader (instance of org/apache/catalina/loader/ParallelWebappClassLoader) of the current class, org/slf4j/LoggerFactory, and the class loader (instance of java/net/URLClassLoader) for the method's defining class, org/slf4j/impl/StaticLoggerBinder, have different Class objects for the type org/slf4j/ILoggerFactory used in the signature
at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:418)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:357)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:383)
at org.apache.kafka.clients.CommonClientConfigs.<clinit>(CommonClientConfigs.java:32)
at org.apache.kafka.clients.producer.ProducerConfig.<clinit>(ProducerConfig.java:305)
at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:304)

据我了解该错误,Camunda 和 Apache Kafka 正在尝试调用 SLF4J 记录器,不是吗? 但就我而言,我需要 Camunda 记录器。所以我想禁用 Apache Kafka 日志记录来解决这个问题。 到目前为止,我的简单 Kafka Producer 如下所示:

String topicName = "camunda";
String test = "test123";
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092,localhost:9093");
props.put("key.serializer","org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer","org.apache.kafka.common.serialization.StringSerializer");
                
Producer<String, String> producer = new KafkaProducer <>(props);
ProducerRecord<String, String> record = new ProducerRecord<>(topicName,test);
producer.send(record);
producer.close();

有办法解决这个问题吗?不幸的是,我找不到任何有关如何禁用 Kafka Logger 的条目,或者问题出在其他地方?

提前非常感谢

最佳答案

禁用 SFL4J-Logger 以实现对 apache Kafka 的 Maven 依赖的方法对我来说效果很好。我更改了我的 pom 文件如下:

<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka-clients</artifactId>
    <version>2.0.0</version>
      <exclusions>
        <exclusion>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-api</artifactId>
        </exclusion>
     </exclusions>
</dependency>

关于java - 在 apache Kafka 中禁用 SLF4J 日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52880915/

相关文章:

java - Glassfish 3.1.2 JDBCRealm 配置

amazon-s3 - 如何正确重启 kafka s3 接收器连接?

java - 如何在 Junit 测试期间将日志级别设置为 DEBUG?

java - Gradle - 线程 "main"java.lang.NoClassDefFoundError : org/slf4j/LoggerFactory 中出现异常

java - 如何捕获从 lambda 抛出的异常

java - 在@Transactional注释中设置默认事务管理器?

java - 在 Java 中测试 try-catch block

apache-kafka - 针对同一集群的多个 kafka 架构注册表

scala - 如何访问InputDStream数据?

tomcat - 多个Grails Application + tomcat-slf4j-logback,如何将应用程序名称写入日志文件