該賞金到期in 4天。這個問題的答案有資格獲得 50聲望獎勵。 H Athukorala正在尋找信譽良好的來源的答案。
我正在尋找一種最好/最新的方式將 spring boot 應用程式日志直接發送到elasticsearch服務器而不使用filebeats或logstash。我怎樣才能做到這一點?Spring Boot 中是否有一種簡單/現代的方法或使用任何好的/知名的庫來實作它?我需要的是直接將日志從spring boot發送到elasticsearch,而不需要像logstash這樣的中間服務。如果第三方庫可以添加pom.xml并且它完全可以這樣做,那很好。我需要它自己處理這個的 spring 應用程式。我已經檢查了一些類似的問題。但是有些庫現在已棄用,有些庫很長時間沒有更新。我想知道一個新圖書館或現在有什么方法可以做到這一點?基本上它寫到控制臺的內容應該發送到elasticsearch。誰能幫我?
uj5u.com熱心網友回復:
您可以使用 Spring boot 提供的 LOGGER:
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
private static final Logger LOGGER = LogManager.getLogger(yourClass.class);
LOGGER.info("PRINT THIS OUT");
這應該顯示在彈性 beantalk 中名為“訊息”的檔案中。
這來自 spring-boot-starter-web 依賴。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
uj5u.com熱心網友回復:
您可以在 pom.xml 中包含logback-elastic-appender庫,并com.internetitem.logback.elasticsearch.ElasticsearchAppender在logback.xml檔案中的日志記錄配置中使用包含的類作為附加程式
<dependency>
<groupId>com.internetitem</groupId>
<artifactId>logback-elasticsearch-appender</artifactId>
<version>1.6</version>
</dependency>
這是您不想使用的庫之一,因為它最近沒有更新嗎?如果是這樣,您可以撰寫一個自定義 appender 并在logback.xml檔案中指向它。appender 的一個簡單實作如下所示:
package com.example.demo;
import java.time.Instant;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.springframework.web.reactive.function.client.WebClient;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.AppenderBase;
import reactor.core.publisher.Mono;
public class ElasticSearchAppender extends AppenderBase<ILoggingEvent> {
private static final String ELASTIC_SEARCH_API_HOST = "http://localhost:9200";
private static final String ELASTIC_SEARCH_INDEX_NAME = "dummy-index";
private static final WebClient webClient = WebClient.create(ELASTIC_SEARCH_API_HOST);
private static final Logger LOGGER = Logger.getLogger(ElasticSearchAppender.class.getName());
public static final DateTimeFormatter ISO_8601_FORMAT = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX")
.withZone(ZoneId.systemDefault());
@Override
protected void append(ILoggingEvent eventObject) {
Map<String, Object> loggingEvent = new LinkedHashMap<>();
loggingEvent.put("@timestamp",
ISO_8601_FORMAT.format(Instant.ofEpochMilli(eventObject.getTimeStamp())));
loggingEvent.put("message", eventObject.getMessage());
// Add additional fields like MDC
webClient.post()
.uri("/{logIndex}/_doc", ELASTIC_SEARCH_INDEX_NAME)
.bodyValue(loggingEvent)
.retrieve()
.bodyToMono(Void.class)
.onErrorResume(exception -> {
LOGGER.log(Level.SEVERE, "Unable to send log to elastic", exception);
return Mono.empty();
})
.subscribe();
}
}
logback.xml:
<configuration>
<appender name="ELASTIC" class="com.example.demo.ElasticSearchAppender" />
<root level="INFO">
<appender-ref ref="ELASTIC"/>
</root>
</configuration>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/344575.html
