这个 C# 字符串格式的本质是什么?

What is the nature of this C# string formatting?

以下摘自this Microsoft document

_logger.LogInformation("Queued Background Task {Guid} is running. " +
                    "{DelayLoop}/3", guid, delayLoop);

这种字符串格式是什么?换句话说,它叫什么,它在哪里记录?是 .NET 还是需要第三方库?

它是 ASP.NET 核心日志记录 - 或者更一般地说,通过 Microsoft.Extensions.Logging.Abstractions 进行日志记录。

虽然它看起来有点像 C# 内插字符串文字,但消息实际上是由日志记录基础结构格式化的。字符串是 message template。消息模板中指定的名称完全独立于稍后提供的表达式 - 但占位符的 order 应为所提供值的顺序。

这允许日志记录提供提取 key/value 对以执行结构日志记录...因此例如您 可以 以 [=29= 中的日志条目结束] 像这样:

{
  "message": "Queued Background Task 1234-5678[...] is running. 100/3",
  "properties": {
    "Guid": "1234-5678[...]",
    "DelayLoop": 100
  }
}

(取决于日志记录提供商。)

我相信这是这个特殊库的内置字符串格式。 它看起来像 C# 内插字符串,但不是 C# 内插字符串。库本身附加字符串和参数。