You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 8中使用NLog自定义线程名:替换默认线程池线程名显示线程ID

.NET 8下NLog线程名/ID记录的适配配置

直接用NLog的${when}布局渲染器实现你的需求,配置写法如下:

${when:when='${threadname}' == '' or '${threadname}' == '.Net TP Worker':inner=${threadid}:else=${threadname}}

配置逻辑

  • 当线程名为空,或者匹配".Net TP Worker"时,输出线程ID
  • 其他情况正常输出线程名

实际配置示例(NLog.config)

如果是在XML配置文件的文件目标中使用:

<target name="file" xsi:type="File" fileName="logs/${shortdate}.log"
        layout="${longdate} | ${when:when='${threadname}' == '' or '${threadname}' == '.Net TP Worker':inner=${threadid}:else=${threadname}} | ${level:uppercase=true} | ${message}" />

代码配置示例(C#)

如果是通过代码动态配置Layout:

var fileTarget = new FileTarget("file")
{
    FileName = "logs/${shortdate}.log",
    Layout = @"${longdate} | ${when:when='${threadname}' == '' or '${threadname}' == '.Net TP Worker':inner=${threadid}:else=${threadname}} | ${level:uppercase=true} | ${message}"
};

LogManager.Configuration.AddTarget(fileTarget);
LogManager.Configuration.AddRuleForAllLevels(fileTarget);
LogManager.ReconfigExistingLoggers();

这个配置完全适配.NET 8的线程池命名变化,同时保留了原有的空线程名处理逻辑。

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 05:34:53