首页 文章

Serilog不与Elasticsearch合作

提问于
浏览
0

我在Windows 7机器上本地安装了Elasticsearch . 它工作正常,我可以使用邮递员查询它 . 使用Postman,我还创建了一个名为cmstest的索引 . 这有一个名为zdsf的表 . 如果我得到该索引的映射(http://localhost:9200/cmstest/_mapping),我得到以下内容:

Mapping

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

现在,我试图使用我的.NET 4.5应用程序中的Serilog登录到Elasticsearch的这个localhost实例 . 但似乎没有任何工作 . 这是我的代码:

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);

我尝试使用以下网址:

http://localhost:9200/

http://localhost:9200/cmstest

http://localhost:9200/cmstest/zdsf

我已经尝试将AutoRegisterTemplate设置为true和false . 但Serilog似乎并没有在弹性搜索中写任何东西 . 它甚至没有例外 . 它只是完成而没有记录任何东西 .

另一个有趣的事情是,当serilog应该进行日志记录时,fiddler不会向http://localhost:9200显示任何流量 . 但是当我通过Postman提出请求时,它会显示流量 .

我究竟做错了什么?我怎样才能让Serilog工作?

UPDATE 1: Updated ElasticSearch.Net nuget package

我发现Sink使用的是旧版本的ElasticSearch.Net . 所以,我删除了ElasticSearch.Net nuget包并下载了最新版本 . 这也在我的app.config中添加了所需的BindingRedirects . 但是登录ElasticSearch仍然无法正常工作 .

1 回答

  • 0

    在我的案例中,有很多事情出错了:

    • 当我尝试使用控制台应用程序时,应用程序在写入日志之前被终止 . 这可以通过在应用程序终止之前使用Console.Readline()或Log.CloseAndFlush()语句来修复 .

    • 接下来,Serilog.Sinks.Elasticsearch包依赖于旧版本的Elasticsearch.net nuget包 . 要使用Elastic 5.X,您需要更高版本的Elasticsearch.net软件包 . 所以,我手动删除了包并获得了最新版本 .

    • 现在即使我有最新的Elasticsearch.net软件包,某些代码也在寻找旧软件包 . 添加程序集重定向修复此问题 .

    • 接下来,我了解到Serilog.Sinks.Elasticsearch具有最低日志记录级别 . 我把它设置为Verbose . 但那没用 . 问题是我在沉没中设置它而不是Serilog级别 . 在此之后,我能够使我的本地应用程序正常工作 .

    • 我认为这仍然无法在Azure功能(在这种情况下我想要的应用程序)中工作,因为Azure功能似乎没有程序集重定向 . 为此,我下载了Serilog.Sinks.Elasticsearch源代码,删除了对旧版Elasticsearch.net的引用,并将其指向最新版本 . 我计划使用此代码而不是nuget包 .

相关问题