我试图弄清楚根据在 NLog 中实现的消息模板语法捕获具有重复孔名称的属性的正确行为是什么。
让我们看一个例子。
使用重复的孔名称记录到控制台,但参数的数量少于名称的数量。
// Targets where to log to: File and Console var logconsole = new NLog.Targets.ConsoleTarget("logconsole"); config.AddRule(global::NLog.LogLevel.Debug, global::NLog.LogLevel.Fatal, logconsole); // Apply config NLog.LogManager.Configuration = config; NLog.LogManager.GetLogger("A").Info("hello from {a} {b} {a}", 1, 2);
输出是
2020-05-26 09:47:37.5013|INFO|A|来自 {a} {b} {a} 的你好
没有任何替代品!
使用相同数量的参数记录到具有重复孔名称的控制台。
// Targets where to log to: File and Console var logconsole = new NLog.Targets.ConsoleTarget("logconsole"); config.AddRule(global::NLog.LogLevel.Debug, global::NLog.LogLevel.Fatal, logconsole); // Apply config NLog.LogManager.Configuration = config; NLog.LogManager.GetLogger("A").Info("hello from {a} {b} {a}", 1, 2, 3);
输出是
2020-05-26 09:49:53.1436|INFO|A|你好,来自 1 2 3
换人适用。
所以,我预计在第一种情况下会看到替换,但没有。NLog 中关于消息模板语法的行为是否正确?
我已经检查了 Serilog 在第一种情况下的行为。它做替换。