2016-10-06 1 views
0

У меня есть NLog макет так:Почему это предложение «когда» в 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: Запущено приложение сервис «MSSQLSERVER» с интервалом в 10 секунд.

Если я пытаюсь макет так:

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

того when не работает на всех, и запись правильно включает outpout информации места вызова:

2016/10/06 09: 17: 01.718 INFO SqlServer.Monitor.Application.MonitorApplication.Start: Приложение приступило к мониторингу службы MSSQLSERVER с интервалом в 10 секунд.

ответ

1

Согласно спецификации, это должно работать:

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

Update, вы где отсутствует :inner. Это необходимо, поскольку первый параметр {when} в этом случае равен when=.

Другой пример, который работает:

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

Смотрите тесты в this PR on GitHub

+0

Спасибо, @Julian. – ProfK

+0

Я добавил пример в документы: https://github.com/NLog/NLog/wiki/When-Layout-Renderer – Julian