You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Serilog Console Sink 输出JSON文本缺失右括号问题求助

问题原因

Serilog日志方法的第一个输入参数为消息模板,而非普通字符串字面量,默认会对内容中的{、}符号按照占位符语法做解析处理:
你传入的JSON字符串中所有大括号都会被解析器识别为占位符的边界标记,解析器按占位符匹配规则处理成对大括号后,会丢弃被判定为占位符闭合标记的多余},最终导致输出的JSON末尾缺失右大括号。该行为是Serilog消息模板的设计特性,并非组件版本的bug。

可行解决方案

方案1:转义消息模板中的大括号

消息模板语法规定,要输出字面量{需写为{{,要输出字面量}需写为}},直接修改日志输出代码即可:

// 所有单大括号替换为双大括号做转义
logger.Information("{{'a':1,'b':{'x':2,'y':{'j':1.2}}}}");

方案2:将JSON作为独立属性传入(更推荐,无需修改字符串内容)

把JSON字符串作为日志属性参数传入,消息模板仅用占位符标记输出位置,Serilog不会对属性值做模板解析,可保证原样输出:

var jsonContent = "{'a':1,'b':{'x':2,'y':{'j':1.2}}}";
logger.Information("{JsonContent}", jsonContent);

方案3:输出模板增加字面量格式说明符

可以直接修改控制台输出的模板,给Message增加:l格式说明符,输出时会按字面量处理字符串,无需调整日志输出代码:

configuration.WriteTo.Console(outputTemplate: "{Message:l}");

内容的提问来源于stack exchange,提问作者Hourglass

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 13:24:08