我需要有一个使用 log4net 启用深度调试日志记录的选项。我熟悉经典的 ASP.Net 如何处理线程,但我想知道线程如何与 ServiceStack 一起工作。目标是使用 %Thread 在日志中将请求分组。我认为唯一的问题是可能存在线程池,并且 %thread id 将在后续请求中重用。
实际上,我正在寻找的是一个可以公开给 log4net 的唯一 ID,因此我可以在构建报告时将单个请求的整个日志记录分组在一起。
任何人都可以提供一些指导吗?
我需要有一个使用 log4net 启用深度调试日志记录的选项。我熟悉经典的 ASP.Net 如何处理线程,但我想知道线程如何与 ServiceStack 一起工作。目标是使用 %Thread 在日志中将请求分组。我认为唯一的问题是可能存在线程池,并且 %thread id 将在后续请求中重用。
实际上,我正在寻找的是一个可以公开给 log4net 的唯一 ID,因此我可以在构建报告时将单个请求的整个日志记录分组在一起。
任何人都可以提供一些指导吗?
请参阅有关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
在所有过滤器、服务、视图等中都可以使用相同的实例。