当 .Net 线程没有名称时,如何使用 NLog 打印 threadid 而不是 threadname?
How to print threadid instead of threadname by using NLog when .Net Thread does not have name?
我有如下的 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}] ...
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>
我有如下的 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}] ...
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>