Serilog格式化打印,缺少大括号

问题

使用seilog打印输出,发现特定内容缺少了结尾的大括号:

字符串原始内容:

"{\"cont\":{\"content\":\"{\\\"Test Datetime\\\":\\\"20180426173039\\\"}\",\"creationTime\":\"2018-04-26 17:34:09\"}}"

正确输出

{"cont":{"content":"{\"Test Datetime\":\"20180426173039\"}","creationTime":"2018-04-26 17:34:09"}}

实际输出

{"cont":{"content":"{\"Test Datetime\":\"20180426173039\"}","creationTime":"2018-04-26 17:34:09"}

差异仅仅在最后缺少了这个大括号。

问题解决

原本打算提出问题了,但是在git issue中查找到了这个问题:Writing JSON string drops bracket in serilog output。与该问题对应的解释在这篇文章 C# 6 string interpolation and Serilog

原因是,不应在serilog中使用c# 6.0的interpolation特性。

错误写法:

log.Information($"output string: [{str}]");

正确写法:

log.Information("output string: [{str}]", str);

使用c#的interploation拼接字符串,和serilog的格式化输出冲突,会被当作格式化字符

posted @ 2020-03-31 21:38  mosakashaka  阅读(455)  评论(0编辑  收藏  举报