Serilog - 在 FileSink 的 JSON 字符串之前包含自定义信息
Serilog - Include Custom Information Before JSON String for FileSink
我有一个记录需要遵循的格式。我正在用
写到 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 格式化程序来删除 timestamp/level/messagetemplate,我可以做到,但最终,我需要的是类似的组合JSON 的 File 和 FileSink 的输出(我也格式化了它。它应该全部在一行中):
2016-06-03 11:19:33.343 +08:00 [Information] {
"MyCustomKeyName": {
"key1": "val1",
"key2": "val2"
}
}
根据我当前的配置,JSON 对象显示对象的正确序列化形式,但我需要时间戳、[信息] 字段(也可以是 error/warning),以及能够将 "Properties" 键重命名为 "MyCustomKeyName".
时间戳和 [Information] 信息是我在使用 WriteTo.File 时默认获得的信息,但我的目标是通过使用带有 json 格式化程序的 FileSink 获得这些信息。使用 FileSink,我得到一个完整的 JSON 对象,其中的字段封装为 key/val 对。我想要 JSON 对象之前的时间戳和级别信息。目标是让 logstash 解析它。
谢谢。
实施您自己的 Serilog.Formatting.ITextFormatter
是解决之道;对于 JSON 部分,直接或通过复制代码重用 Serilog JsonFormatter
应该相当简单。
实现格式化程序后,您可以通过 WriteTo.File()
代替内置的 JsonFormatter
。
我有一个记录需要遵循的格式。我正在用
写到 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 格式化程序来删除 timestamp/level/messagetemplate,我可以做到,但最终,我需要的是类似的组合JSON 的 File 和 FileSink 的输出(我也格式化了它。它应该全部在一行中):
2016-06-03 11:19:33.343 +08:00 [Information] {
"MyCustomKeyName": {
"key1": "val1",
"key2": "val2"
}
}
根据我当前的配置,JSON 对象显示对象的正确序列化形式,但我需要时间戳、[信息] 字段(也可以是 error/warning),以及能够将 "Properties" 键重命名为 "MyCustomKeyName".
时间戳和 [Information] 信息是我在使用 WriteTo.File 时默认获得的信息,但我的目标是通过使用带有 json 格式化程序的 FileSink 获得这些信息。使用 FileSink,我得到一个完整的 JSON 对象,其中的字段封装为 key/val 对。我想要 JSON 对象之前的时间戳和级别信息。目标是让 logstash 解析它。
谢谢。
实施您自己的 Serilog.Formatting.ITextFormatter
是解决之道;对于 JSON 部分,直接或通过复制代码重用 Serilog JsonFormatter
应该相当简单。
实现格式化程序后,您可以通过 WriteTo.File()
代替内置的 JsonFormatter
。