【问题标题】:When does NLog capture the ThreadID?NLog 什么时候捕获 ThreadID?
【发布时间】:2025-12-10 23:55:01
【问题描述】:

如果我在 nlog.config 中打开了异步日志记录,ThreadID 在哪里捕获?

上下文:我正在使用 .NET、Rx 和 TPL 数据流(又名 TDP)开始一个新项目。它将大量使用异步操作和后台工作队列。

目标:在我的日志记录中,我想捕获正在执行工作的ManagedThreadId,以及并行完成工作的时间(在 Rx 中很容易出错,其中默认调度程序不是 ThreadPool)。如果我在 nlog.config 中打开了异步日志记录,那么 ThreadID 是在哪里捕获的?

关注:我在 NLog 的核心 LogEntry 类中看不到 ThreadID。例如,它不会发送到cbley/NLog.SignalR 中的浏览器。如果我在 nlog.config 中打开了异步日志记录,ThreadID 在哪里捕获?如果在呈现日志条目(在 NLog 后台线程中)之前没有捕获它,那么 ThreadId 对我来说毫无用处,我需要找到更合适的日志库。

【问题讨论】:

    标签: multithreading asynchronous system.reactive nlog


    【解决方案1】:

    NLog 正确地捕获了 threadid。

    NLog 在LayoutRender 派生类上使用[ThreadAgnostic],这些类可以在调用线程之外使用/呈现。因为ThreadIdLayoutRender 没有该属性,所以它不能延迟到异步转换之后。

    【讨论】:

    最近更新 更多