当前位置: 首页 > news >正文

log4j2输出到kafka

maven

<!-- log4j2 kafka appender -->
        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-clients</artifactId>
            <version>0.9.0.1</version>
            <exclusions> <!-- exclude掉过时的log依赖 -->
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>2.10.4</version>
        </dependency>
        <!-- log4j2 async -->
        <dependency>
            <groupId>com.lmax</groupId>
            <artifactId>disruptor</artifactId>
            <version>3.3.0</version>
        </dependency>

log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT" ignoreExceptions="false">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] (%F:%L)  - %m%n" />
        </Console>
        <Kafka name="KafkaAppender" topic="error-log">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] (%F:%L)  - %m%n" />
            <Property name="bootstrap.servers">localhost:9092</Property>
            <Property name="timeout.ms">10000</Property>
        </Kafka>
    </Appenders>
    <Loggers>
        <AsyncLogger name="async">
            <AppenderRef ref="KafkaAppender" />
        </AsyncLogger>
        <Root level="info">
            <AppenderRef ref="Console" />
            <AppenderRef ref="KafkaAppender" level="error" />
        </Root>
    </Loggers>
</Configuration>

test

@Test
    public void consumeErrorLog(){
        Properties props = new Properties();
        props.put("zookeeper.connect", "localhost:2181");
        props.put("auto.offset.reset","smallest");
        props.put("group.id", "testgroup6");
        props.put("enable.auto.commit", "true");
        props.put("zookeeper.session.timeout.ms", "400");
        props.put("zookeeper.sync.time.ms", "2000"); // 从200修改成2000 太短有rebalance错误
        props.put("auto.commit.interval.ms", "1000");
        ConsumerConfig consumerConfig =  new kafka.consumer.ConsumerConfig(props);
        ConsumerConnector consumerConnector = kafka.consumer.Consumer.createJavaConsumerConnector(consumerConfig);

        Map<String, Integer> topicCountMap = new HashMap<String, Integer>();
        int localConsumerCount = 1;
        topicCountMap.put(TOPIC, localConsumerCount);
        Map<String, List<KafkaStream<byte[], byte[]>>> consumerMap = consumerConnector
                .createMessageStreams(topicCountMap);
        List<KafkaStream<byte[], byte[]>> streams = consumerMap.get(TOPIC);
        streams.stream().forEach(stream -> {
            ConsumerIterator<byte[], byte[]> it = stream.iterator();
            while (it.hasNext()) {
                System.out.println(new String(it.next().message()));
            }
        });
    }

docs

  • 使用Log4j将程序日志实时写入Kafka

如何使用Kafka实时的收集与存储这些Log4j产生的日志呢?一种方案是使用其他组件(比如Flume,或者自己开发程序)实时监控这些日志文件,然后发送至Kafka。而另外一种比较便捷的方案是使用Kafka自带的Log4jAppender,在Log4j配置文件中进行相应的配置,即可完成将Log4j产生的日志实时发送至Kafka中。

  • KafkaAppender

  • log4j2-kafka配置实例

相关文章:

  • 清空回收站后怎么恢复文件?还是这个方法好
  • Mongodb延迟复制节点配置
  • DDR硬件设计要点详解(包括电源部分)
  • docker升级
  • 蚂蚁金服技术专家杜伟:万人低头时代,支付宝APP无线网络性能该如何保障
  • WebMvcTest与SpringBootTest
  • 第四周作业
  • Java json设置时间格式,Jackson设置时间格式,json设置单引号
  • 208道 java 高频面试题和答案
  • LOOPS
  • mysql全解
  • centos6.5更新python2.7影响pip和easy_install
  • let和const注意点
  • springMVC上传图片
  • 海信研发出一款带伸缩式摄像头的社交电视产品
  • 《剑指offer》分解让复杂问题更简单
  • ➹使用webpack配置多页面应用(MPA)
  • CSS 三角实现
  • docker容器内的网络抓包
  • HTTP--网络协议分层,http历史(二)
  • java8-模拟hadoop
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • java中的hashCode
  • js对象的深浅拷贝
  • Linux中的硬链接与软链接
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • orm2 中文文档 3.1 模型属性
  • PHP CLI应用的调试原理
  • 力扣(LeetCode)357
  • 聊聊flink的BlobWriter
  • 区块链共识机制优缺点对比都是什么
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 微信小程序开发问题汇总
  • 小程序01:wepy框架整合iview webapp UI
  • 一文看透浏览器架构
  • FaaS 的简单实践
  • ​比特币大跌的 2 个原因
  • #ifdef 的技巧用法
  • #WEB前端(HTML属性)
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (02)vite环境变量配置
  • (26)4.7 字符函数和字符串函数
  • (5)STL算法之复制
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (编译到47%失败)to be deleted
  • (二)hibernate配置管理
  • (十一)手动添加用户和文件的特殊权限
  • (转) Face-Resources
  • (转)Linux下编译安装log4cxx
  • (转载)PyTorch代码规范最佳实践和样式指南
  • *** 2003
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .jks文件(JAVA KeyStore)