c# - 当.Net Thread没有名称时,如何使用NLog打印threadid而不是threadname?
问题描述
我有如下的 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>
推荐阅读
- php - 如何在 Bagisto 电子商务的客户/帐户页面的“sidemenu”上添加新图标
- r - 将 geom_point 大小与 geom_tile 大小匹配
- pine-script - 在高点上方止损的策略进入。延迟进入
- php - 更新库存数量
- r - 使用 R 中的 for 循环计算简单的每日收益
- minizinc - 我如何理解为什么我的 MiniZinc 实例永远运行
- javascript - Websocket 1006 仅在 chrome 上
- ios - “自我”在 iOS 的混搭方法中真正代表什么?
- c# - 使用 office.interop 在 C# 中生成 PowerPoint 演示文稿图表的问题
- stripe-payments - Stripe paymentIntents 问题