gpt4 book ai didi

java - 使用 Elasticsearch Java API 的记录器警告

转载 作者:太空宇宙 更新时间:2023-11-04 14:44:45 25 4
gpt4 key购买 nike

我正在编写一个 Java 控制台应用程序来执行一些文档处理并将文档添加到 Elasticsearch 索引。我使用一个简单的包装类来处理与 Elasticsearch 的通信。

此包装类的相关摘录是 getClientConnection() 方法:

protected Client getClientConnection()
{
if (this.client == null)
{
Settings settings = ImmutableSettings.settingsBuilder()
.put("cluster.name", this.clustername).build();

this.client = new TransportClient(settings)
.addTransportAddresses(new InetSocketTransportAddress(this.hostname, this.port));
}

return this.client;
}

addToIndex() 方法:

public void addToIndex(List<HashMap<String, Object>> documents, String index, String doctype)
{
Client client = this.getClientConnection();
BulkRequestBuilder bulkRequest = client.prepareBulk();

IndexRequestBuilder requestBuilder = client.prepareIndex(index, doctype);

for (HashMap<String, Object> curDocument : documents)
{
requestBuilder.setSource(curDocument);
bulkRequest.add(requestBuilder);
}

BulkResponse bulkResponse = bulkRequest.execute().actionGet();

this.closeClientConnection();
}

一切都运行良好,当我从控制台应用程序调用此代码时,文档被添加到索引中,但在运行它时我收到一些警告消息:

log4j:WARN No appenders could be found for logger (org.elasticsearch.plugins).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

我知道 Elastic 使用 log4j 进行日志记录,但我不确定为什么以及它尝试记录的内容。

由于这是一个独立的应用程序,我不想将 elasticsearch 配置目录添加到类路径中。该应用程序应该能够在未运行 Elastic 的计算机上运行。还值得注意的是,在我的应用程序中,我使用 log4j2 进行日志记录。

现在我的问题:

  1. 是否可以仅禁用 TransportClient 的记录器?我看到 LogConfigurator.configure 方法采用设置对象参数,但我不确定如何使用它。

  2. 我可以以某种方式将我自己的记录器注入(inject)到 TransportClient 中吗?

最佳答案

log4j 没有 Null 附加程序。虽然您可以使用 slf4j 做到这一点,但我不确定您是否可以桥接一个期望 log4j 使用 slf4j 的库。除了这个(痛苦的)练习之外,我建议您只需将 log4j-1.2.jar 添加到类路径中,并使用指向 stdout 的根记录器配置 log4j.properties 文件:

# Set root logger level to FATAL and its only appender to stdout.
log4j.rootLogger=FATAL, stdout

# stdout set to be a ConsoleAppender.
log4j.appender.stdout=org.apache.log4j.ConsoleAppender

现在,从 ES 发送到记录器的唯一消息将是致命异常,无论如何,您可能想了解这一点。确实,您可能需要 ERROR 级别,并且您应该编写自己的应用程序以使用 log4j 并记录您自己的客户端调用。在这种情况下,您可能需要一个滚动文件附加器。如果您确实想丢弃所有日志事件,请将 stdout 和 stderr 通过管道传输到/dev/null:

$ ./myprog &> /dev/null

有很多变体也可以工作,例如使用文件追加器并将其大小限制为 1K 或其他。

log4j 已停产。因此,您可以做同样的事情,但使用 log4j2 jar 和适当的 json/xml 配置文件。我知道这听起来很痛苦,但是有大量的示例,并且了解日志记录框架在您自己的代码中将非常宝贵。

关于java - 使用 Elasticsearch Java API 的记录器警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24543787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com