Я пишу консольное приложение 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?