ServiceStack,请求,线程ID,log4net

时间:2013-04-12 19:11:48

标签: asp.net log4net servicestack

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

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

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

1 个答案:

答案 0 :(得分:1)

concurrency in ServiceStack上查看此页面,即在ASP.NET中托管时ServiceStack本身不创建任何新线程,只需在同一IIS / Nginx / etc上处理请求的ASP.NET HTTP WebWorker处理请求。最终控制线程池和线程实例取决于底层的ASP.NET,但它们通常会重用相同的线程来处理不同的请求。

只要您希望在单个请求的整个生命周期中共享任何数据,就可以使用IHttpRequest.Items,例如您只需使用PreRequestFilters在start of the request分配一个Guid:

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

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