2017-07-18 86 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