我遇到了记录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继续运行。有什么建议?是否有任何人可能遇到的教程可能会有所帮助?
答案 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应用程序时,可以添加拦截器以自动为每个传入请求创建一个段。您可以尝试一个示例应用程序。