首页 > 解决方案 > 当.Net Thread没有名称时,如何使用NLog打印threadid而不是threadname?

问题描述

我有如下的 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}] ...

标签: c#.netmultithreadingloggingnlog

解决方案


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>

推荐阅读