使用 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 应用程序时,您可以添加拦截器以自动为每个传入请求创建一个段。您可以尝试一个示例应用程序。
我在记录 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 应用程序时,您可以添加拦截器以自动为每个传入请求创建一个段。您可以尝试一个示例应用程序。