使用AWS X-Ray .NET MVC记录异常

时间:2017-07-18 16:41:22

标签: c# .net amazon-web-services aws-xray

我遇到了记录AWS X-Ray异常的问题。

以下是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-Ray继续运行。有什么建议?是否有任何人可能遇到的教程可能会有所帮助?

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:2)

@observable2 = Observable.timer(1000); 设置为AWS_XRAY_CONTEXT_MISSING可以停止AddException以抛出"段不存在"异常,但这也意味着没有任何内容记录到XRay服务。

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

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