Serilog не работает с Elasticsearch

Я установил Elasticsearch локально на свой компьютер с Windows 7. Он работает правильно, и я могу запросить его с помощью почтальона. Используя Postman, я также создал индекс cmstest. Это таблица под названием zdsf. Если я получу сопоставление (http://localhost:9200/cmstest/_mapping) для этого индекса, я получите следующее:

Сопоставление

Я также могу размещать записи в этой таблице с помощью Postman.

Теперь я пытаюсь использовать Serilog из моего приложения .NET 4.5 для входа в этот локальный экземпляр Elasticsearch, но, похоже, ничего не работает. Вот мой код:

var elasticUri = new Uri("http://localhost:9200/cmstest/zdsf");

var loggerConfig = new LoggerConfiguration()
                .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(elasticUri)
                {
                    AutoRegisterTemplate = true
                });

zdsf z = new zdsf();

z.filedate = DateTime.Now;
z.filename = "File2";

var logger = loggerConfig.CreateLogger();

var jsonString = new JavaScriptSerializer().Serialize(z);

logger.Error(jsonString);

Я пробовал использовать следующие URL-адреса:

http://localhost:9200/

http://localhost:9200/cmstest

http://localhost:9200/cmstest/zdsf

Я попытался установить для AutoRegisterTemplate значение true, а также false. Но похоже, что Serilog ничего не пишет в elasticsearch. Это даже не исключение. Он просто заканчивается, ничего не регистрируя.

Еще одна интересная вещь заключается в том, что скрипач не показывает трафик на http://localhost:9200, когда предполагается, что serilog ведение журнала. Но он показывает трафик, когда я делаю запросы через Postman.

Что я делаю неправильно? Как я могу заставить работать Serilog?

ОБНОВЛЕНИЕ 1. Обновлен пакет Nuget ElasticSearch.Net

Я обнаружил, что Sink использует старую версию ElasticSearch.Net. Итак, я удалил пакет Nuget ElasticSearch.Net и загрузил последнюю версию. Это также добавило необходимые BindingRedirects в мой app.config. Но вход в ElasticSearch по-прежнему не работает.


person Yasir    schedule 29.03.2017    source источник
comment
Вы захотите взглянуть на параметр IndexFormat в ElasticsearchSinkOptions. URL-адрес не будет включать индекс, вместо этого это будет URL-адрес экземпляра Elasticsearch.   -  person Daniel Leach    schedule 08.04.2017


Ответы (2)


В моем случае было несколько вещей, которые пошли не так:

  1. Когда я пытался с консольным приложением, приложение завершалось до записи журнала. Это можно исправить, используя оператор Console.Readline () или Log.CloseAndFlush () до завершения работы приложения.
  2. Далее, пакет Serilog.Sinks.Elasticsearch полагается на более старую версию пакета nuget Elasticsearch.net. Для использования Elastic 5.X вам потребуется более поздняя версия пакета Elasticsearch.net. Итак, я вручную удалил пакет и получил последнюю версию.
  3. Теперь, несмотря на то, что у меня был последний пакет Elasticsearch.net, какой-то код где-то искал старый пакет. Это исправлено добавлением перенаправления сборки.
  4. Затем я узнал, что Serilog.Sinks.Elasticsearch имеет минимальный уровень ведения журнала. Я установил подробный. Но это не сработало. Проблема заключалась в том, что я устанавливал его в раковине, а не на уровне Serilog. После этого я смог заставить работать свое локальное приложение.
  5. Я думаю, что это по-прежнему не будет работать в функции Azure (в данном случае - в моем желаемом приложении), поскольку функция Azure, похоже, не имеет перенаправления сборки. Для этого я загрузил исходный код Serilog.Sinks.Elasticsearch, удалил ссылку на старую версию Elasticsearch.net и указал ее на последнюю версию. Я планирую использовать этот код вместо пакета nuget.
person Yasir    schedule 28.04.2017
comment
Спасибо. 1 и / или 2 исправили это для меня. - person Tong; 30.04.2020

Вы читали Жизненный цикл регистраторов? Вы должны либо вызвать Log.CloseAndFlush() (если вы входите в систему через глобальный объект Log), либо удалить локальные Logger объекты. В противном случае ваши события журнала никогда не записываются.

person Christian Davén    schedule 05.11.2019