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 附加程序的主要内容,如果未能解决你的问题,请参考以下文章

如何在java程序中手动初始化log4j.xml?

如何使用 Spring Boot 将 log4j.xml、应用程序属性和 jar 外部化?

如何在spring 配置文件中配置log4j.xml

Eclipse:在 log4j.xml 中引用 log4j.dtd

log4j.xml 精选的log4j.xml文档,比较详细,网上的版本很多,这个版本相对而言比较完整

如何写一个log4j.xml的工具类方法