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

NLog中避免嵌入双大括号被折叠的高效方法(含Serilog差异)

解决NLog保留双大括号的问题

这个问题我之前也碰到过,NLog默认会把日志消息当作格式化模板来解析,{{和}}会被自动转义成单个大括号,这就是为什么你输入{{"aaa}}后输出变成了{"aaa}。要让NLog原封不动保留这些双大括号,有几个简单的解决办法:

方法1:直接使用LogEventInfo构造日志(推荐)

这种方法会绕过NLog的消息模板解析,把整个字符串当作字面量输出,最直接也不容易出错:

var logger = NLog.LogManager.GetLogger("x");
// 直接构造LogEventInfo,把要输出的内容作为原始消息
var logEvent = new LogEventInfo(LogLevel.Warn, logger.Name, "{{\"aaa}}");
logger.Log(logEvent);

这样日志会原封不动输出{{"aaa}},完全符合你的期望。

方法2:转义双大括号(适用于直接使用日志方法的场景)

如果你还是习惯用Warn这类快捷方法,需要把每个字面量的{{写成{{{{,}}写成}}}}——因为NLog会把每一对{{解析成一个{,所以要输出一对{{,就得写四个连续的大括号:

NLog.LogManager.GetLogger("x").Warn("{{{{\"aaa}}}}");

执行这段代码后,NLog会把{{{{解析为{{,}}}}解析为}},最终输出就是你想要的{{"aaa}}。

额外说明

为什么Serilog会有差异?因为Serilog的消息模板机制和NLog不同,它对大括号的解析逻辑更严格,而NLog默认遵循.NET的格式化字符串规则(和string.Format一致),所以会自动处理双大括号的转义。如果你的场景经常需要输出包含双大括号的内容,方法1是更省心的选择,不用反复处理转义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:09:28