NLog: Как включить символы stati c во внутренний макет - PullRequest
2 голосов
/ 20 января 2020

При использовании NLog для записи в целевой файл я хочу, чтобы мой макет включал «[xxx mS]», если свойства-события: item = dur не равен NULL. В противном случае ничего не будет добавлено. Как я могу добавить «[» и «mS]» к внутреннему тексту when? Кроме того, я должен использовать что-то кроме length () в условии когда для ненулевого обнаружения?

${message}${when:when='length(${event-properties:item=dur})'>0:inner=${event-properties:item=dur}"

Если dur равен 437, вывод журнала будет ...

<message> [437 mS]

Если dur не установлен, вывод журнала будет ...

<message>

Мысли?

Ответы [ 2 ]

2 голосов
/ 20 января 2020

Немного больше проб и ошибок привело меня к этому решению ...

${message}${when:when='${event-properties:item=dur}'!='':inner= [${event-properties:item=dur} mS]}

Кажется, вам не нужно экранировать или цитировать пробелы и / или квадратные скобки в «внутренний» макет. Все, что появляется после 'inner =', помещается в вывод.

Редактировать: Изменено условное (заменена длина (...)> 0) на основе комментариев Рольфа Кристенсена.

1 голос
/ 20 января 2020

Может быть, что-то вроде этого:

<nlog>
   <variables>
     <variable name="durationMs" value="${when::when='${event-properties:item=dur}'=='':else= \[${event-properties:dur} mS\]" />
     <variable name="defaultLayout" value="${message}${durationMs}" />
   </variables>
</nlog>
...