【问题标题】:ServiceStack, requests, thread id's, log4netServiceStack、请求、线程 ID、log4net
【发布时间】:2013-04-12 19:11:47
【问题描述】:

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

我真正想要的是一个唯一的 ID,我可以向 log4net 公开,这样我就可以在构建报告时将单个请求的整个日志记录分组在一起。

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

【问题讨论】:

    标签: asp.net log4net servicestack


    【解决方案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 的相同实例在所有过滤器、服务、视图等中都可用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-02
      • 1970-01-01
      • 1970-01-01
      • 2015-11-06
      • 1970-01-01
      • 1970-01-01
      • 2012-09-19
      相关资源
      最近更新 更多