我是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 Server。
答案 0 :(得分:1)
如Rolf所述,当使用Microsoft Extension Logging时,解析是通过Microsoft Extension Logging完成的。 (由于性能原因,默认情况下)
Microsoft Extension Logging不支持字符串格式的消息,而仅支持结构化的消息。因此{2} {1}
和{0}
将被解析为名称(从左到右)
记录以下内容会更合乎逻辑:
_logger.LogInformation("User {User} orders {OrderId}", username, order.Id);
如果您真的很喜欢字符串格式的消息,则可以:
直接使用NLog
var logger = LogManager.GetCurrentClassLogger();
logger.Info("User {1} orders {0}", order.Id, username);