我有一个我需要遵循的格式来记录。我正在使用
写入FileSink Serilog.Log.Logger = new LoggerConfiguration()
.WriteTo.Sink(new FileSink(ConfigurationManager.AppSettings["serilogPath"],new JsonFormatter(), null))
.CreateLogger();
这会生成一个每行JSON对象看起来像(我格式化它,它实际上是日志文件中的一行):
{
"Timestamp": "2016-05-29T02:49:33.2153863+08:00",
"Level": "Error",
"MessageTemplate": "my template",
"Properties": {
<MyPropertiesHere>
}
}
我从另一个问题中问过,我需要指定自己的json formater来删除timestamp / level / messagetemplate,我可以这样做,但最终,我需要的是像File的输出和一个带有JSON的FileSink(我也将它格式化了。它应该全部在一行中):
2016-06-03 11:19:33.343 +08:00 [Information] {
"MyCustomKeyName": {
"key1": "val1",
"key2": "val2"
}
}
使用我当前的配置,JSON对象显示对象的正确序列化形式,但我需要时间戳,[信息]字段(也可能是错误/警告),并且能够重命名“属性” “MyCustomKeyName”的关键。
时间戳和[信息]信息是我在使用WriteTo.File时默认获得的信息,但我的目标是通过使用带有json格式化程序的FileSink获得该信息。使用FileSink,我得到一个完整的JSON对象,其中的字段封装在键/ val对中。我想在JSON对象之前有时间戳和级别信息。目标是让logstash解析它。
谢谢。
答案 0 :(得分:1)
实现自己的Serilog.Formatting.ITextFormatter
是要走的路;对于JSON部分,直接或通过复制代码重用Serilog JsonFormatter
应该相当简单。
实施格式化程序后,您可以通过WriteTo.File()
代替内置JsonFormatter
。