2

我需要有一个使用 log4net 启用深度调试日志记录的选项。我熟悉经典的 ASP.Net 如何处理线程,但我想知道线程如何与 ServiceStack 一起工作。目标是使用 %Thread 在日志中将请求分组。我认为唯一的问题是可能存在线程池,并且 %thread id 将在后续请求中重用。

实际上,我正在寻找的是一个可以公开给 log4net 的唯一 ID,因此我可以在构建报告时将单个请求的整个日志记录分组在一起。

任何人都可以提供一些指导吗?

4

1 回答 1

1

请参阅有关ServiceStack 中的并发性的此页面,即托管在 ASP.NET 中的 ServiceStack 本身不会创建任何新线程,请求只是在处理请求的同一 IIS/Nginx/etc ASP.NET HTTP WebWorker 上处理。线程池和线程实例的最终控制权取决于底层的 ASP.NET,但它们共同重用相同的线程来处理不同的请求。

IHttpRequest.Items每当您想在单个请求的整个生命周期内共享任何数据时使用,例如,您可以使用 PreRequestFilters在请求开始时简单地分配一个 Guid:

this.PreRequestFilters.Add((req, res) => req.Items["ReqId"] => Guid.NewGuid());

它持续请求的整个生命周期,并且IHttpRequest在所有过滤器、服务、视图等中都可以使用相同的实例。

于 2013-04-12T19:37:06.583 回答