【发布时间】:2023-03-04 14:38:02
【问题描述】:
更新:事实证明这是存在于 Serilog 中的差异(我通过隧道访问),但 not 存在于 NLog 中,它将单个参数视为逐字字符串(作为一个 (具体来说,我)可能期望)
使用 NLog,如果我想记录可能包含嵌入式双括号的内容:{{ 而不会折叠它们,最有效的方法是什么?
例如:
NLog.LogManager.GetLogger("x").Warn("{{\"aaa}}")
在我的自定义 serilog-target 中发射:
{"aaa}
我想要:
{{"aaa}}
是
NLog.LogManager.GetLogger("x").Warn("{0}","{{\"aaa}}")
最好的方法还是有更有效的方法?
更新:不需要这样的技巧:
NLog.LogManager.GetLogger("x").Warn("{{\"aaa}}")
...确实有效!
(这不是(只是)我是迂腐的,它是a question regarding a high perf/throughput requirement的后续)
【问题讨论】:
-
不确定我是否理解。如果不提供任何参数,NLog 不会对字符串进行任何解析。所以你的第一个例子没有意义,除非你有一个坏的目标。
-
@RolfKristensen 是的,100% 正确(请参阅下面的声明)。这确实意味着 Julian 在链接问题中的答案是错误的:- 转发器需要使用 NLog 的格式实现
-
我想你的解决方法会这样做,尽管我可能会在自定义目标中这样做。如果没有参数,则使用消息模板
{0}将字符串作为参数注入 Serilog(Serilog 缓存消息模板,因此它应该很便宜) -
猜你应该将你的问题改写为“在 Serilog 中记录文字消息”:)
-
@RolfKristensen 哈哈。我在标题中遇到了你;)(并且已经在明显的地方完成了过渡:-
SerilogTarget)。感谢您的思考、检查和验证。
标签: .net formatting escaping nlog serilog