C# 当.Net线程没有名称时,如何使用NLog打印threadid而不是threadname?

C# 当.Net线程没有名称时,如何使用NLog打印threadid而不是threadname?,c#,.net,multithreading,logging,nlog,C#,.net,Multithreading,Logging,Nlog,我有如下NLog配置 它打印线程的名称(如果存在)。否则我会得到空字符串而不是线程名 问题:我如何存档下面的行为 如果线程有名称-打印线程的名称 否则-打印ManagedThreadId(例如,与threadidNLog变量相同) 当前配置示例: 请注意:我希望避免打印这两个变量,例如,此布局不有用:。。。[${threadname}-${threadid}]…TLDR:使用此-${threadname:whenEmpty=${threadid}} 因此,正确的配置: 如果您可以同时记

我有如下NLog配置

它打印线程的名称(如果存在)。否则我会得到空字符串而不是线程名

问题:我如何存档下面的行为

  • 如果线程有名称-打印线程的名称
  • 否则-打印ManagedThreadId(例如,与
    threadid
    NLog变量相同)
当前配置示例:



请注意:我希望避免打印这两个变量,例如,此布局不有用:
。。。[${threadname}-${threadid}]…
TLDR:使用此-
${threadname:whenEmpty=${threadid}}

因此,正确的配置:



如果您可以同时记录线程ID和线程名称(如果有),您只需定义自己的布局即可。。。()@elgonzo,我同意。然而,我只想从上面写一个变量。请注意,谢谢。仅供参考:如果您真的只想在没有线程名称的情况下输出线程ID,请确保您不能在日志中混淆这两个名称。毕竟,一些线程可以命名为“123”,而另一个(未命名)线程可以具有线程ID 123…我不确定,但可能可以使用一个条件布局渲染器${When}或${WhenEmpty}…@elgonzo,当然可以。我们的大多数线程都有很好的名称,比如“XXX对象加载器”或“YYY数据发布器”。我们希望在日志中包含这些名称,并避免添加线程标识。您是对的,在这种情况下,id为123的线程将以与名为“123”的线程相同的方式打印。关于${WhenEmpty}-agree,将检查并发布结果。