Kafka之——扩展logback将日志输出到Kafka实例扩展

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/79136841

一、概述

本文基于《Kafka之——扩展logback将日志输出到Kafka实例》,请先阅读《Kafka之——扩展logback将日志输出到Kafka实例》。

二、扩展

Kafka之——扩展logback将日志输出到Kafka实例》一文中,只能输出单个字符串到Kafka,本文对上一篇博文《Kafka之——扩展logback将日志输出到Kafka实例》做了相应的扩展,能够输出Json字符串到Kafka。主要变动如下:

1、新增JsonFormatter类

主要的作用是接收ILoggingEvent返回Json字符串,代码如下:

package com.lyz.storm.formatter.impl;

import com.lyz.storm.formatter.Formatter;

import ch.qos.logback.classic.spi.ILoggingEvent;

/**
 * Json格式的Formatter
 * @author liuyazhuang
 *
 */
public class JsonFormatter implements Formatter {
	
	private static final String QUOTE = "\"";
	private static final String COLON = ":";
	private static final String COMMA = ",";
	
	private boolean expectJson = false;
	

	@Override
	public String format(ILoggingEvent event) {
		StringBuilder sb = new StringBuilder();
		sb.append("{");
		fieldName("level", sb);
		quote(event.getLevel().levelStr, sb);
		sb.append(COMMA);
		fieldName("logger", sb);
		quote(event.getLoggerName(), sb);
		sb.append(COMMA);
		fieldName("timestamp", sb);
		sb.append(event.getTimeStamp());
		sb.append(COMMA);
		fieldName("message", sb);
		if(this.expectJson){
			sb.append(event.getFormattedMessage());
		}else{
			quote(event.getFormattedMessage(), sb);
		}
		sb.append("}");
		return sb.toString();
	}
	
	private void fieldName(String name, StringBuilder sb){
		quote(name, sb);
		sb.append(COLON);
	}
	
	private void quote(String value, StringBuilder sb){
		sb.append(QUOTE);
		sb.append(value);
		sb.append(QUOTE);
	}

	public boolean isExpectJson() {
		return expectJson;
	}

	public void setExpectJson(boolean expectJson) {
		this.expectJson = expectJson;
	}
}
2、修改logback.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
   <appender name="KAFKA" class="com.lyz.storm.appender.KafkaAppender">
   		<topic>foo</topic>
   		<zookeeperHost>192.168.209.121:2181</zookeeperHost>
   		<brokerList>192.168.209.121:9092</brokerList>
   		<formatter class="com.lyz.storm.formatter.impl.JsonFormatter">
   			<expectJson>false</expectJson>
   		</formatter>
   </appender>
   <root level="debug">
   		<appender-ref ref="KAFKA"/>
   </root>
</configuration>

三、测试

在Kafka服务器命令行输入如下命令:

kafka-console-consumer.sh --zookeeper localhost:2181 --topic foo --from-beginning 
监听日志输出。

此时,我们运行RogueApplication类,监听到的日志如下:

[root@liuyazhuang121 local]# kafka-console-consumer.sh --zookeeper localhost:2181 --topic foo --from-beginning      
{"level":"WARN","logger":"com.lyz.storm.trend.RogueApplication","timestamp":1516674702158,"message":"This is a warning (slow state)."}
{"level":"WARN","logger":"com.lyz.storm.trend.RogueApplication","timestamp":1516674707699,"message":"This is a warning (slow state)."}
{"level":"WARN","logger":"com.lyz.storm.trend.RogueApplication","timestamp":1516674712700,"message":"This is a warning (slow state)."}
如下图所示:


四、温馨提示

大家可以到链接http://download.csdn.net/download/l1028386804/10219227下载完整扩展源码


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰 河

可以吃鸡腿么?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值