2017-07-18 84 views
1

我在记录AWS X-Ray的异常时遇到了问题。带有AWS X-Ray的记录异常.NET MVC

这里是在Application_Error事件:

protected void Application_Error(object sender, EventArgs e) 
    { 
     Exception exception = Server.GetLastError(); 

     if (exception != null) 
     { 
      var InnerException = exception.InnerException; 

      Session["error"] = String.Format("{0} ::: {1}", exception.Message, exception.StackTrace); 
      try 
      { 
       AWSXRayRecorder.Instance.AddException(exception); 
      } 
      catch (Exception ee) 
      { 
       // ignore errors for XRay 
      } 
     } 
     Server.ClearError(); 

    } 

然而,引发错误的AddException行指出“段中不存在CallContext中”

第一次试图让X射线去。有什么建议?是否有任何教程可以帮助任何人遇到?

回答

2

如果您试图访问Segment并且当前上下文中当前没有设置,则XRay的默认行为是抛出异常。你可以看到default behavior mentioned in the environment variables documentation

正如该文档指出的,您可以将EC2实例上的AWS_XRAY_CONTEXT_MISSING环境变量设置为LOG_ERROR以调整此行为。

或者,您可以使用ContextMissingStrategy属性更改代码内的此行为。 Documentation link

+0

啊,好吧......我又开始出现的Application_BeginRequest段()和Application_EndRequest结束它()。这不起作用。现在我已经把这个开始和结束包围了现在正在工作的AddException()。 – Auzzy

+0

我对.NET Web体系结构不够了解以提供更多的帮助,但我想你可能想在某些预过滤器(代理)中创建网段到您的Web服务器代码,然后在某些后期处理中关闭该段。筛选(代理)到相同的Web服务器代码。 –

2

设置AWS_XRAY_CONTEXT_MISSINGLOG_ERROR可以停止AddException来抛出“段不存在”异常,但这也意味着什么都不会被记录到XRay服务。

要真正解决问题,您应该在逻辑开始时创建一个段。在编写ASP.NET Web API应用程序时,可以添加一个拦截器为每个传入请求自动创建一个段。有一个示例应用程序,你可以尝试。

https://github.com/awslabs/aws-xray-dotnet-webapp