ASP.NET Core中的NLog和ElasticSearch

时间:2019-02-20 10:29:15

标签: elasticsearch asp.net-core nlog

我正在尝试设置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是容器的名称。这些容器位于同一网络上。

0 个答案:

没有答案