Как напечатать threadid вместо threadname, используя NLog, когда .Net Thread не имеет имени? - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть конфигурация NLog, как показано ниже.

Она печатает имя потока, если оно существует.В противном случае я получаю пустую строку вместо имени потока.

Вопрос: как мне архивировать поведение ниже?

  • Если у потока есть имя - вывести имя потока
  • В противном случае - выведите ManagedThreadId (например, то же самое с переменной threadid NLog).

Пример текущей конфигурации:

<variable name="defaultLayout" value="${date} ${level} [${threadname}] ${logger} - ${message} ${exception:format=ToString}"/>

<targets async="true">
  <target name="ConsoleAppender" 
          type="ColoredConsole" 
          layout="${var:defaultLayout}" />
</targets>

Обратите внимание: я хотел бычтобы избежать печати обеих переменных, например, этот макет бесполезен: ... [${threadname}-${threadid}] ...

1 Ответ

0 голосов
/ 26 февраля 2019

TLDR: используйте это - ${threadname:whenEmpty=${threadid}}

Итак, правильная конфигурация:

<variable name="defaultLayout" value="${date} ${level} [${threadname:whenEmpty=${threadid}}] ${logger} - ${message} ${exception:format=ToString}"/>

<targets async="true">
   <target name="ConsoleAppender" 
      type="ColoredConsole" 
      layout="${var:defaultLayout}" />
</targets>
...