我在scala中实现了一个自定义的log4j appender,它将日志消息发送到ElasticSearchAPI端点。
class KibanaAppender extends AppenderSkeleton {
override def append(event: LoggingEvent): Unit = {
val finalMessage =
s"""|{"create": {"_index" : "$indexName"}}
|{"message":"$message","level":"$level","@timestamp":"$timeStamp"
""".stripMargin
HttpService.post(json = finalMessage)
}
override def close(): Unit = {
if (!this.closed) {
this.closed = true
}
}
override def requiresLayout(): Boolean = true
}
由于API端点支持批量请求,是否有一种方法可以使用定义的批处理大小对这些请求进行批处理并发布它们?
1条答案
按热度按时间jfewjypa1#
在几乎所有的Log4j appender中,为了提高性能而对
LogEvent
进行批处理都是一种非常常见的做法。您可以查看其来源以获得灵感。也就是说,我很好奇您为什么要为这样一个简单的工作实现自己的appender。HTTP或Socket appender与JSON模板布局的组合应该足以将日志输入到Elasticsearch中。您实际上不需要编写一行代码。