【问题标题】:Logging a literal message in NLog and/or Serilog在 NLog 和/或 Serilog 中记录文字消息
【发布时间】: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


【解决方案1】:

原来问题是错误的。上面的代码在 NLog 中工作 - 单个字符串不被视为消息模板, 逐字呈现。

我根据链接的问题将其通过隧道传送到 Serilog,而 Serilog 正在折叠我在问题中显示的效果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    相关资源
    最近更新 更多