elasticsearch,logging,elastic-stack,serilog,.net,elasticsearch,Logging,Elastic Stack,Serilog" /> elasticsearch,logging,elastic-stack,serilog,.net,elasticsearch,Logging,Elastic Stack,Serilog" />

.net Serilog不使用Elasticsearch

.net Serilog不使用Elasticsearch,.net,elasticsearch,logging,elastic-stack,serilog,.net,elasticsearch,Logging,Elastic Stack,Serilog,我已在Windows 7计算机上本地安装了Elasticsearch。它工作正常,我可以用邮递员查询。我还使用Postman创建了一个名为cmstest的索引。这有一张叫做zdsf的桌子。如果我得到这个索引的映射(),我会得到以下结果: 我也可以使用Postman将条目发布到此表中 现在,我正试图使用.NET4.5应用程序中的Serilog来登录Elasticsearch的本地主机实例,但似乎没有任何效果。这是我的密码: var elasticUri = new Uri("http://loc

我已在Windows 7计算机上本地安装了Elasticsearch。它工作正常,我可以用邮递员查询。我还使用Postman创建了一个名为cmstest的索引。这有一张叫做zdsf的桌子。如果我得到这个索引的映射(),我会得到以下结果:

我也可以使用Postman将条目发布到此表中

现在,我正试图使用.NET4.5应用程序中的Serilog来登录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:

我已尝试将AutoRegisterTemplate设置为true和false。但Serilog似乎没有向elasticsearch写任何东西。它甚至没有给出一个例外。它只是在没有记录任何内容的情况下完成

另一件有趣的事情是,当serilog应该进行日志记录时,fiddler不会显示任何流量。但当我通过邮递员提出请求时,它会显示流量

我做错了什么?我怎样才能让Serilog上班

更新1:更新的ElasticSearch.Net nuget软件包


我发现水槽使用的是旧版本的ElasticSearch.Net。因此,我删除了ElasticSearch.NETNuget包并下载了最新的。这也在my app.config中添加了所需的绑定重定向。但是登录ElasticSearch仍然不起作用。

在我的案例中,有很多地方出了问题:

  • 当我尝试使用控制台应用程序时,该应用程序在写入日志之前被终止。这可以通过在应用程序终止之前使用Console.Readline()或Log.CloseAndFlush()语句来解决
  • 接下来,Serilog.Sinks.Elasticsearch包依赖于Elasticsearch.net nuget包的旧版本。要访问Elastic 5.X,您需要Elasticsearch.net包的更高版本。因此,我手动删除了该包并获得了最新版本
  • 现在,尽管我有最新的Elasticsearch.net软件包,但有些代码正在寻找旧的软件包。添加程序集重定向修复了此问题
  • 接下来,我了解到Serilog.Sinks.Elasticsearch具有最低日志记录级别。我把它设为详细。但那没用。问题是我把它设置在水槽里,而不是Serilog级别。在此之后,我能够让我的本地应用程序工作
  • 我认为这在Azure函数(本例中是我想要的应用程序)中仍然不起作用,因为Azure函数似乎没有程序集重定向。为此,我下载了Serilog.Sinks.Elasticsearch源代码,删除了对Elasticsearch.net旧版本的引用,并将其指向了最新版本。我计划使用此代码而不是nuget包
    你读过吗?您必须调用
    Log.CloseAndFlush()
    (如果您是通过全局
    Log
    对象进行日志记录),或者处理本地
    Logger
    对象。否则,将永远不会写入日志事件。

    您需要查看ElasticsearchSinkOptions上的IndexFormat参数。Url不包含索引,而是Elasticsearch实例的Url。谢谢。1和/或2为我修复了它。