我正在编写一个 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 进行日志记录。
现在我的问题:
是否可以只禁用 TransportClient 的记录器?我看到了采用设置对象参数的 LogConfigurator.configure 方法,但我不确定如何使用它。
我可以以某种方式将自己的记录器注入到 TransportClient 中吗?