Serilog - 在FileSink的JSON字符串之前包含自定义信息

时间:2016-06-03 06:06:17

标签: c# logging serilog

我有一个我需要遵循的格式来记录。我正在使用

写入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解析它。

谢谢。

1 个答案:

答案 0 :(得分:1)

实现自己的Serilog.Formatting.ITextFormatter是要走的路;对于JSON部分,直接或通过复制代码重用Serilog JsonFormatter应该相当简单。

实施格式化程序后,您可以通过WriteTo.File()代替内置JsonFormatter