.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
相关产品推荐
相关产品推荐

