如何从存储在 CouchDB 中的 Serilog 中反序列化 LogEvents
How to deserialize LogEvents from Serilog stored in CouchDB
我目前正在使用 Serilog 将(日志记录应用程序)记录到 CouchDB 数据库,并将一些类型分解到数据库中。
我有一个单独的应用程序(报告应用程序)试图从数据库中提取 LogEvents 并将它们反序列化为原始 LogEvents。报告应用程序与日志应用程序一样了解相同的类型,并且数据库中的特定类型已完全分解为它。
Json.Net 的反序列化器在反序列化 MessageTemplate 时出现问题。即使使用自定义转换器,它也有很多问题,我可能做错了(各种反序列化异常,但我无法分辨出真正的模式)。
有没有人能成功做到这一点?我的印象是能够从日志中提取类型是 Serilog 的功能之一,所有数据都在那里,所以我不明白为什么它不可能。
这些类型也都是完全可序列化的,它们通常是 serialized/deserialized by Json.net。
经过更多研究,我找到了部分解决问题的方法。使用 http://json2csharp.com/ 生成新的 类 - 将 RootObject 重命名为某个名称(例如,SpecificLogEvent)并使用:
var logEvent = JsonConvert.DeserializeObject<SpecificLogEvent>(doc.Value);
然后在需要的地方将对象转换为真实的对象。
我暂时不会将其标记为答案,因为我喜欢简单的来回操作并避免这个额外的步骤,这会产生冗余 类.
我目前正在使用 Serilog 将(日志记录应用程序)记录到 CouchDB 数据库,并将一些类型分解到数据库中。
我有一个单独的应用程序(报告应用程序)试图从数据库中提取 LogEvents 并将它们反序列化为原始 LogEvents。报告应用程序与日志应用程序一样了解相同的类型,并且数据库中的特定类型已完全分解为它。
Json.Net 的反序列化器在反序列化 MessageTemplate 时出现问题。即使使用自定义转换器,它也有很多问题,我可能做错了(各种反序列化异常,但我无法分辨出真正的模式)。
有没有人能成功做到这一点?我的印象是能够从日志中提取类型是 Serilog 的功能之一,所有数据都在那里,所以我不明白为什么它不可能。
这些类型也都是完全可序列化的,它们通常是 serialized/deserialized by Json.net。
经过更多研究,我找到了部分解决问题的方法。使用 http://json2csharp.com/ 生成新的 类 - 将 RootObject 重命名为某个名称(例如,SpecificLogEvent)并使用:
var logEvent = JsonConvert.DeserializeObject<SpecificLogEvent>(doc.Value);
然后在需要的地方将对象转换为真实的对象。 我暂时不会将其标记为答案,因为我喜欢简单的来回操作并避免这个额外的步骤,这会产生冗余 类.