我正在尝试使用 log4j 附加程序将日志数据推送到 kafka 代理中。我无法将消息推送到经纪人,有人可以帮助我解决这个问题吗?我正在使用 log4j-1.2.15jar 和 kafka_2.9.2-0.8.1.jar。这是我的附加器:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>
</layout>
</appender>
<appender class="kafka.producer.KafkaLog4jAppender" name="kafka">
<param name="BrokerList" value="oos007:9092"/>
<param name="Topic" value="SessionSpy"/>
<layout class="org.apache.log4j.PatternLayout">
<param value="%d{ISO8601} %p %c{2} - %m%n" name="ConversionPattern"/>
</layout>
</appender>
<logger name="kafka.push">
<level value="ALL"/>
<appender-ref ref="kafka"/>
</logger>
<root>
<level value="ALL"/>
<appender-ref ref="console"/>
</root>
</log4j:configuration>
我的测试类(class)是:
/**
*
*/
package com.kafka.test;
import org.apache.log4j.Logger;
public class KafkaLogTester {
protected static final Logger logger = Logger.getLogger(KafkaLogTester.class);
public static void main(String[] args) {
logger.info("OMG! It works! ");
}
}
我收到了这些错误。
log4j:WARN No appenders could be found for logger (kafka.utils.VerifiableProperties).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN Error during default initialization
java.lang.NoClassDefFoundError: com/yammer/metrics/Metrics
at kafka.metrics.KafkaMetricsGroup$class.newMeter(KafkaMetricsGroup.scala:46)
at kafka.producer.ProducerStats.newMeter(ProducerStats.scala:23)
at kafka.producer.ProducerStats.<init>(ProducerStats.scala:24)
at kafka.producer.ProducerStatsRegistry$$anonfun$1.apply(ProducerStats.scala:33)
at kafka.producer.ProducerStatsRegistry$$anonfun$1.apply(ProducerStats.scala:33)
at kafka.utils.Pool.getAndMaybePut(Pool.scala:61)
at kafka.producer.ProducerStatsRegistry$.getProducerStats(ProducerStats.scala:37)
at kafka.producer.async.DefaultEventHandler.<init>(DefaultEventHandler.scala:48)
at kafka.producer.Producer.<init>(Producer.scala:59)
at kafka.producer.KafkaLog4jAppender.activateOptions(KafkaLog4jAppender.scala:84)
at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:257)
at org.apache.log4j.xml.DOMConfigurator.parseAppender(DOMConfigurator.java:285)
at org.apache.log4j.xml.DOMConfigurator.findAppenderByName(DOMConfigurator.java:171)
at org.apache.log4j.xml.DOMConfigurator.findAppenderByReference(DOMConfigurator.java:184)
at org.apache.log4j.xml.DOMConfigurator.parseChildrenOfLoggerElement(DOMConfigurator.java:502)
at org.apache.log4j.xml.DOMConfigurator.parseCategory(DOMConfigurator.java:415)
at org.apache.log4j.xml.DOMConfigurator.parse(DOMConfigurator.java:919)
at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:790)
at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:696)
at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:471)
at org.apache.log4j.LogManager.<clinit>(LogManager.java:125)
at org.apache.log4j.Logger.getLogger(Logger.java:118)
at com.kafka.test.KafkaLogTester.<clinit>(KafkaLogTester.java:16)
Caused by: java.lang.ClassNotFoundException: com.yammer.metrics.Metrics
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 23 more
最佳答案
确保您添加了相同版本的 scala 库。当我使用比 Kafka 的 Scala 版本更旧的 scala lib 时,我曾经遇到过同样的问题。
关于java - 为 Log4j Appender 运行 Kafka-0.8.1 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23145576/