如何在Serilog中记录消息模板的字段名称

时间:2018-11-06 14:53:34

标签: serilog

使用输出模板时,Serilog中是否有任何设置可以告诉消息模板中变量的名称?

_logger.LogWarning(@"Role with Id {RoleId} not found", id);

我使用日志记录文件,并希望看到RoleId字段与消息一起记录在文件中,因此我可以使用该字段进行过滤。 我的Serilog设置看起来像

"Serilog": {
"MinimumLevel": {
  "Default": "Debug",
  "Override": {
    "Microsoft.EntityFrameworkCore.Storage.IRelationalCommandBuilderFactory": "Warning"
  }
},
"WriteTo": [
  {
    "Name": "File",
    "Args": {
      "path": "bin/Debug/netcoreapp2.0/Logs/log-.txt",
      "rollingInterval": "Day",
      "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss zzz} {Level:u3} {SourceContext} {Message:lj} {RequestId} {Properties} {NewLine} {Exception}"
      //"formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact"
    }
  }] 

}

我知道我可以使用LogContext.PushProperty("RoleId", id),但这不是我自己的选择,也不能使用CompactJsonFormatter

1 个答案:

答案 0 :(得分:0)

我发现日志是否已写入文件,并且$后跟字段(非对象)(_logger.LogWarning("Role with Id {$RoleId} not found", id);)  Serilog将生成消息模板,带有$ sign的字段名称和字段值。还需要在{Properties}中指定outputTemplate