1

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

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

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

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

4

1 回答 1

2

NLog 正确地捕获了 threadid。

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

于 2013-01-29T23:31:29.787 回答