我正在尝试设置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>
现在,当我在Localhost上使用ElasticSearch服务器在本地运行时,它可以正常工作,因为默认URI为http://localhost:9200。但是,当我尝试在ElasticSearch服务器的URI为http://elasticsearch:9200的容器中运行该容器时,显然会失败。
所以我需要一个特定于环境的URI。经过一番阅读后,我添加了一个条目
"ElasticsearchUrl": "http://elasticsearch:9200"
到我的appsettings.docker.json文件,但这没有被发现。不确定如何解决此问题。我已经考虑过编写layoutrenderer,但是由于需要无参数构造函数,因此不确定如何将配置选项注入到renderer中。我已经考虑过特定于环境的NLog.Config,并将URI放在其中,但是单个属性似乎有很多重复。我尝试使用
在运行时加载目标var target = LogFactory.Configuration.FindTargetByName("ElasticSearch");
然后设置目标的Uri,但是尽管我可以在AllTargets列表中看到该目标,但始终返回null。
有什么好主意吗?
经过更多调查,我发现确实将目标的Uri更新为http://elasticsearch:9200,但是日志从未到达。 elasticsearch是容器的名称。这些容器位于同一网络上。