servicestack,Asp.net,Log4net,servicestack" /> servicestack,Asp.net,Log4net,servicestack" />

Asp.net ServiceStack、请求、线程id';s、 log4net

Asp.net ServiceStack、请求、线程id';s、 log4net,asp.net,log4net,servicestack,Asp.net,Log4net,servicestack,我需要有一个选项来使用log4net启用深度调试日志记录。我熟悉经典ASP.Net如何处理线程,但我想知道线程如何与ServiceStack一起工作。目标是使用%线程在日志中将请求分组在一起。我认为唯一的问题是可能存在线程池,%线程id将在后续请求中重用 实际上,我要寻找的是一个唯一的id,我可以向log4net公开,这样我就可以在构建报告时将单个请求的整个日志记录组合在一起 有人可以提供一些指导吗?请参阅上的此页,即当在ASP.NET中托管ServiceStack时,它本身不会创建任何新线程,

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

实际上,我要寻找的是一个唯一的id,我可以向log4net公开,这样我就可以在构建报告时将单个请求的整个日志记录组合在一起

有人可以提供一些指导吗?

请参阅上的此页,即当在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
实例