我正在使用 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()
?