java valuetype_logstash系列-ValueType如何抽象为java类

上一篇讲到logstash的configFile和ValueType是如何按配置层次抽象出来的,具体到logstash的语法,可以看到

Array,Hash,Number,String.......在java中也有对应的类,只是"toString()"后有些微差距,这是一个关键点:

如何借助java.util包来抽象出logstash对应的"java类"

这个需求不好描述,网上搜了很多没有搜到封装过的,只能自己摸索着动手,目前已经封装好并投入使用(lombook自配@Data)

首先抽象出接口ValueType,这里要覆盖toString(),并提供一个isNull()的方法,toString由下面的实现类具体实现(前面讲了关键是toString)

public interfaceValueType {

@Override

String toString();

Boolean isNull();

}

然后编写logstash最常用的5个数据类型(其他类型没用到,没有琢磨过)

1、LArray,对应logstash的Array类型,借助java的ArrayList封装实现

注意要添加左右的中括号和双引号

public class LArray implementsValueType {//[ "/var/log/messages", "/var/log/*.log" ]

private Listlist;public LArray(Listlist) {this.list =list;

}

@OverridepublicString toString() {if(isNull()) {return "";

}

String str= StringUtils.join(list, "\",\"");return "[\"" + str + "\"]";

}

@OverridepublicBoolean isNull() {returnCollectionUtils.isEmpty(list);

}

}

2、LBoolean 对应logstash的Boolean类型,借助java的Boolean封装实现

public class LBoolean implementsValueType {//true false 不带引号

private Boolean b = false;publicLBoolean(Boolean b) {this.b =b;

}

@OverridepublicString toString() {returnb.toString();

}

@OverridepublicBoolean isNull() {return false;

}

}

3、LHash 对应logstash的Hash类型,借助java的HashMap封装实现

public class LHash implementsValueType {//{ "field1" => "value1" "field2" => "value2" }//{//"field1" => "value1"//"field2" => "value2"//...//}

private Mapmap;public LHash(Mapmap) {this.map =map;

}

@OverridepublicString toString() {if(isNull()) {return "";

}

StringBuilder sb= new StringBuilder("{");//todo 如果T是List的情况

map.forEach((k, v) ->{

sb.append("\"").append(k).append("\" => ");if (v instanceofString) {

sb.append("\"");

}

sb.append(v);if (v instanceofString) {

sb.append("\" ");

}

});

sb.append("\n}");returnsb.toString();

}

@OverridepublicBoolean isNull() {returnmap.isEmpty();

}

}

4、LNumber 对应logstash的Number类型,借助java的Integer和Float封装实现

public class LNumber implementsValueType {//33 33.3 整型或浮点型

privateInteger i;privateFloat f;publicLNumber(Integer i) {this.i =i;this.f = null;

}publicLNumber(Float f) {this.f =f;this.i = null;

}

@OverridepublicString toString() {if (i != null) {returni.toString();

}if (f != null) {returnf.toString();

}return "";

}

@OverridepublicBoolean isNull() {return i == null && f == null;

}/*** 私有化*/

private voidsetI(Integer i) {

}/*** 私有化*/

private voidsetF(Float f) {

}

}

5、LString 对应logstash的String类型,借助java的String封装实现,这里注意构造方法传入的时候需要自己传入单引号或双引号包围的字符串值

public class LString implementsValueType {//双引号或单引号 "aa" 'aa'

privateString str;publicLString(String str){this.str =str;

}

@OverridepublicString toString() {returnstr;

}

@OverridepublicBoolean isNull() {returnStringUtils.isBlank(str);

}

}

以上是组装Logstash .conf配置文件的语法用java实现的ValueType部分,下一篇讲解如何使用封装Plugin,PluginBlock,Setting

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值