【问题标题】:Why can I only destructure anonymous types?为什么我只能解构匿名类型?
【发布时间】:2020-02-25 22:47:12
【问题描述】:

我正在尝试设置一个 ASP.NET Core 3.1 Web API 来使用 Serilog v2.9 和 Serilog.Sinks.Elasticsearch v8.0.1 测试 elk 堆栈。这对我来说是全新的,我只是想弄清楚。我似乎一切正常,可以整天记录简单的事情,并在 ES 和 Kibana 中看到它们。麻烦的是,除了匿名类型之外,我似乎无法解构任何东西。举例说明:

var data = new
{
    SampleData = "Hello World!"
};

_logger.LogInformation("Destructured anonymous object: {@data}", data);

产生预期的结果。一个漂亮的闪亮日志条目,对象“数据”完美序列化。鉴于:

var test = new TestClass
{
    Guid = Guid.NewGuid(),
    Timestamp = DateTime.UtcNow,
    Title = "Testing this serialization!"
};

_logger.LogInformation("Destructred discrete type.  {@test}", test);

什么都不生产。也不例外,在 ElasticSearch 中没有条目。没有。 TestClass 是一个简单的类,只有这 3 个属性,所有这些属性都应该可以序列化。我想不通。这是我的记录器配置:

Log.Logger = new LoggerConfiguration()
   .Enrich.FromLogContext()
   .Enrich.WithExceptionDetails()
   .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri(elasticUri))
   {
       AutoRegisterTemplate = true,
       AutoRegisterTemplateVersion = AutoRegisterTemplateVersion.ESv6,
       CustomFormatter = new ExceptionAsObjectJsonFormatter(renderMessage: true)
   })
   .CreateLogger();

我错过了什么?我是否必须喜欢、生成属性映射或其他东西来破坏非匿名对象? .Net Core 3.1 太新了吗?我不知所措。我在网上看到的每个示例都表明这应该有效。

【问题讨论】:

    标签: elastic-stack elk


    【解决方案1】:

    在解决这个问题几个小时后,我终于明白了这一点。我的问题是我使用的是普通的旧 Serilog NuGet 包而不是 Serilog.AspNetCore。一旦我安装了后者,它就开始按预期工作。

    很好。我希望这可以帮助我这个职位的其他人以及其他优秀的指南:https://www.humankode.com/asp-net-core/logging-with-elasticsearch-kibana-asp-net-core-and-docker

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-17
      • 2011-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多