Я пытаюсь настроить цель 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 - это имя контейнера.Контейнеры находятся в одной сети.