NLog и ElasticSearch в ASP.NET Core - PullRequest
       10

NLog и ElasticSearch в ASP.NET Core

0 голосов
/ 20 февраля 2019

Я пытаюсь настроить цель NLog для вывода журналов в ElasticSearch.В моем файле NLog.config у меня есть следующая цель:

 <target name="ElasticSearch" xsi:type="BufferingWrapper" flushTimeout="5000">
  <target xsi:type="ElasticSearch"
          layout="${logger} | ${threadid} | ${message}" 
          includeAllProperties="true"              
          index="my-log-${date:format=yyyy.MM.dd}">                 
  </target>
</target>

Теперь это работает нормально, когда я работаю локально с сервером ElasticSearch на Localhost, поскольку URI по умолчанию равен http://localhost:9200. Но когда япопробуйте выполнить это в контейнерах, где URI сервера ElasticSearch равен http://elasticsearch:9200, что явно не удается.

Так что мне нужен специфический для среды URI.После небольшого прочтения я добавил запись

"ElasticsearchUrl": "http://elasticsearch:9200"

в мой файл appsettings.docker.json, но это не поднялось.Не уверен, как решить эту проблему.Я думал о написании компоновщика макетов, но не уверен, как получить параметры конфигурации, вводимые в визуализатор, поскольку он ожидает конструктор без параметров.Я подумал об окружающем NLog.Config и поместил туда URI, но, похоже, много повторений для одного свойства.Я пытался загрузить цель во время выполнения, используя

var target = LogFactory.Configuration.FindTargetByName("ElasticSearch");

, затем устанавливая Uri цели, но это всегда возвращает ноль, несмотря на то, что я вижу цель в списке AllTargets.

какие-нибудь яркие идеи?

После небольшого исследования я обнаружил, что действительно Uri цели обновляется до http://elasticsearch:9200, однако журналы никогда не поступают.asticsearch - это имя контейнера.Контейнеры находятся в одной сети.

...