今天使用Serilog打印object对象的时候,发现Jtoken对象输出成 [[[]] 这种形式了,本来以为是传入参数的问题,确认了几遍后发现确实是Serilog输出的问题。github上也有人提出了这个问题:
原因比较简单,dynamic对象无法通过反射之类的通用形式获取其结构,由此对于Serilog这种结构化日志来说,无法获得很好的支持。不过她提供了LoggerConfiguration.Destructure函数让用户手动提供这类对象的结构化方法。
对于JToken这类的对象,网上也有人提供了现成的解决方案: destructurama/json-net。有同样需求的人下载使用下吧。
这个项目比较简单,关键部分就一个文件,如果觉得它的输入方法还有待改进,可以自行修改。