当.Net线程没有名称时,如何通过使用NLog打印线程ID而不是线程名?

时间:2019-02-26 15:39:33

标签: c# .net multithreading logging nlog

我具有如下所示的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 :(得分:4)

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>