NLog 在使用 String.Format 样式时乱序替换参数
NLog replaces parameters out of order when using String.Format style
我是 NLog 的新手,有一些令人困惑的输出,所以我 运行 进行了测试。
_logger.LogInformation(string.Format("{2} {1} {0}", "broken", "nlog", "is"));
_logger.LogInformation("{2} {1} {0}", "broken", "nlog", "is");
结果是:
is nlog broken
broken nlog is
在使用 String.Format 样式替换时,NLog 不会像 String.Format 那样工作吗?
似乎是按顺序替换值,而不考虑数量。我确实尝试过使用 "{0} {0} {0}"
作为格式字符串进行测试,但它没有被记录下来,这让我相信它确实对这些值给予了一定程度的关注。这也让我相信 NLog 不会将处理传递给 String.Format
因为 String.Format 会很乐意用第一个参数替换每个参数。
以防万一,我们正在使用 NLog 写入 SQL 服务器。
正如 Rolf 提到的,当使用 Microsoft Extension Logging 时,解析是由 Microsoft Extension Logging 完成的。 (默认情况下,因为性能)
Microsoft 扩展日志记录不支持 string-formatted 消息,只支持结构化消息。所以 {2} {1}
和 {0}
将被解析为名称(从左到右)
记录这个更合乎逻辑:
_logger.LogInformation("User {User} orders {OrderId}", username, order.Id);
如果您真的喜欢 string-formatted 条消息,那么您可以这样做:
直接使用NLog,
var logger = LogManager.GetCurrentClassLogger();
logger.Info("User {1} orders {0}", order.Id, username);
- 或者,在 NLogProviderOptions 中启用 "ParseMessageTemplates",参见 https://github.com/NLog/NLog.Extensions.Logging/wiki/NLog-LoggerProvider-Options
我是 NLog 的新手,有一些令人困惑的输出,所以我 运行 进行了测试。
_logger.LogInformation(string.Format("{2} {1} {0}", "broken", "nlog", "is"));
_logger.LogInformation("{2} {1} {0}", "broken", "nlog", "is");
结果是:
is nlog broken
broken nlog is
在使用 String.Format 样式替换时,NLog 不会像 String.Format 那样工作吗?
似乎是按顺序替换值,而不考虑数量。我确实尝试过使用 "{0} {0} {0}"
作为格式字符串进行测试,但它没有被记录下来,这让我相信它确实对这些值给予了一定程度的关注。这也让我相信 NLog 不会将处理传递给 String.Format
因为 String.Format 会很乐意用第一个参数替换每个参数。
以防万一,我们正在使用 NLog 写入 SQL 服务器。
正如 Rolf 提到的,当使用 Microsoft Extension Logging 时,解析是由 Microsoft Extension Logging 完成的。 (默认情况下,因为性能)
Microsoft 扩展日志记录不支持 string-formatted 消息,只支持结构化消息。所以 {2} {1}
和 {0}
将被解析为名称(从左到右)
记录这个更合乎逻辑:
_logger.LogInformation("User {User} orders {OrderId}", username, order.Id);
如果您真的喜欢 string-formatted 条消息,那么您可以这样做:
直接使用NLog,
var logger = LogManager.GetCurrentClassLogger(); logger.Info("User {1} orders {0}", order.Id, username);
- 或者,在 NLogProviderOptions 中启用 "ParseMessageTemplates",参见 https://github.com/NLog/NLog.Extensions.Logging/wiki/NLog-LoggerProvider-Options