1

我正在使用 NLog 在 Seq 服务器中创建语义日志。我想记录一个对象,该对象具有一种ToString()生成数据内容的简短人类可读摘要的方法。因此,我想在使用消息模板对其进行格式化时将对象呈现为字符串。我还想将该对象作为日志属性包含在内,并将其所有属性呈现为 JSON,以便我可以在 Seq.xml 中检查这些数据。所以基本上我想用两种不同的方式记录同一个对象。

这是我尝试在代码中执行此操作的方式:

public async Task AddReading(ISensorReading reading)
  {
  log.Info()
    .Message("add reading {$value}", reading)
    .Property("SensorReading", reading)
    .Write();
  AddToRepository(reading);
  await Task.Delay(reading.TimeToLive.ToTimeSpan(), cancelCleanup.Token)
    .ContinueOnAnyThread();
  RemoveFromRepository(reading);
  }

第一部分工作正常。问题出在.Property()零件上。这也调用.ToString()对象并将其呈现为字符串。我想要一个 JSON 文档。

如果我使用它作为我的消息模板,我可以获得这种效果:

  .Message("add reading {@value}", reading)

这会将对象作为 JSON 呈现到日志属性中,但不幸的是,也会将 JSON 注入格式化的日志消息中,这会导致消息非常不可读。使用时如何获得这种行为.Property()

4

0 回答 0