Kafka Log4j.xml 附加程序
Posted
技术标签:
【中文标题】Kafka Log4j.xml 附加程序【英文标题】:Kafka Log4j.xml appender 【发布时间】:2015-11-12 16:17:02 【问题描述】:我已经安装了 kafka 并且工作正常现在我正在尝试将 log appender 添加到我现有应用程序的 log4j.xml 文件中,以便我可以将消息推送到 Kafka,所以 log4j.xml kafka appender 的任何示例都会非常有帮助,我已将以下依赖项添加到我的 pom.xml
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.10</artifactId>
<version>0.8.2.2</version>
</dependency>
这是我添加到我的 log4j.xml 中的内容
<appender name="kafka" class="kafka.producer.KafkaLog4jAppender">
<param name="topic" value="test" />
<param name="brokerList" value="localhost:9092" />
<param name="compressionType" value="none" />
<param name="requiredNumAcks" value="0" />
<param name="syncSend" value="true" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%ddd.MM.yyyy HH:mm:ss] %p: %c1.%M() - %m%n" />
</layout>
</appender>
这是添加后的错误
java.lang.NoSuchMethodError: org.apache.log4j.spi.LoggingEvent.getTimeStamp()J 在 kafka.producer.KafkaLog4jAppender.append(KafkaLog4jAppender.scala:72) 在 org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:230) 在 org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:65) 在 org.apache.log4j.Category.callAppenders(Category.java:203) 在 org.apache.log4j.Category.forcedLog(Category.java:388) 在 org.apache.log4j.Category.log(Category.java:853) 在 org.slf4j.impl.Log4jLoggerAdapter.log(Log4jLoggerAdapter.java:597) 在 org.apache.commons.logging.impl.SLF4JLocationAwareLog.info(SLF4JLocationAwareLog.java:159) 在 org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:272) 在 org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111) 在 org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939) 在 org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 在 org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) 在 org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) 在 org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633) 在 org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:656) 在 org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1635) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 在 java.util.concurrent.FutureTask.run(FutureTask.java:262) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 java.lang.Thread.run(Thread.java:745)
【问题讨论】:
【参考方案1】:这是我的结果。我用 kafka 0.8.2.2 对其进行了测试。请确保添加以下依赖项
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.10</artifactId>
<version>0.8.2.2</version>
</dependency>
这里是示例 log4j 文件:
log4j.rootLogger=INFO
log4j.appender.KAFKA=kafka.producer.KafkaLog4jAppender
log4j.appender.KAFKA.BrokerList=sandbox.hortonworks.com:6667
log4j.appender.KAFKA.Topic=test2
log4j.appender.KAFKA.layout=org.apache.log4j.PatternLayout
log4j.appender.KAFKA.layout.ConversionPattern=%m%n
log4j.appender.KAFKA.syncsend=true
log4j.logger.org.nk.kafkatut.producer=INFO, KAFKA
这是我使用 log4j 的示例应用程序代码:-
package org.nk.kafkatut.producer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Log4jAppenderDemo
public static final Logger LOG = LoggerFactory.getLogger(Log4jAppenderDemo.class.getName());
public static void main(String[] args)
LOG.info("test message:1");
LOG.info("test message:2");
【讨论】:
我已经更新了 log4j.xml 条目以及之后我看到的错误 @GG0424 看起来像 log4j 依赖问题。您能否发布您的 log4j.xml 的全部内容。以上是关于Kafka Log4j.xml 附加程序的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Spring Boot 将 log4j.xml、应用程序属性和 jar 外部化?
Eclipse:在 log4j.xml 中引用 log4j.dtd