为什么这个 NLog 布局的 "when" 子句不起作用?

Why is this NLog layout's "when" clause not working?

我有一个像这样的 NLog 布局:

${date} ${uppercase:${level}} ${when:when=(level)>=LogLevel.Debug:callsite:includeSourcePath=false}: ${message}

when 大部分都有效。我的日志条目不显示调用站点,因为它们处于 Info 级别,但单词 callsite 在日志条目中作为文字输出:

2016/10/06 09:15:15.814 INFO callsite: Application has started monitoring 'MSSQLSERVER' service at 10 second intervals.

如果我尝试这样的布局:

${date} ${uppercase:${level}} ${when:when=(level)>=LogLevel.Debug:${callsite:includeSourcePath=false}}: ${message}

然后 when 根本不起作用,并且条目包含正确的输出调用站点信息:

2016/10/06 09:17:01.718 INFO SqlServer.Monitor.Application.MonitorApplication.Start: Application has started monitoring 'MSSQLSERVER' service at 10 second intervals.

根据规范,这应该有效:

${date} ${uppercase:${level}} ${when:when=(level>=LogLevel.Debug):inner=${callsite:includeSourcePath=false}}: ${message}

更新,你哪里漏了:inner。这是必需的,因为在这种情况下 {when} 的第一个参数是 when=.

另一个有效的例子:

${when:when=level<=LogLevel.Info:inner=Good:else=Bad}

查看 this PR on GitHub

中的测试