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

Record Exception w/ AWS X-Ray .NET MVC

我在记录 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 行上抛出一个错误,指出 "Segment doesn't exist in CallContext"

第一次尝试启动 X-Ray。有什么建议吗?有没有任何人 运行 了解的教程可能有帮助?

XRay 的默认行为是在您尝试访问 Segment 并且 none 当前在当前上下文中设置时抛出异常。你可以看到 default behavior mentioned in the environment variables documentation.

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

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

AWS_XRAY_CONTEXT_MISSING 设置为 LOG_ERROR 可以停止 AddException 抛出 "Segment doesn't exist" 异常,但这也意味着不会向 XRay 服务记录任何内容。

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

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