带有AWS X-Ray的记录异常.NET MVC
问题描述:
我在记录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射线去。有什么建议?是否有任何教程可以帮助任何人遇到?
答
如果您试图访问Segment
并且当前上下文中当前没有设置,则XRay的默认行为是抛出异常。你可以看到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来抛出“段不存在”异常,但这也意味着什么都不会被记录到XRay服务。
要真正解决问题,您应该在逻辑开始时创建一个段。在编写ASP.NET Web API应用程序时,可以添加一个拦截器为每个传入请求自动创建一个段。有一个示例应用程序,你可以尝试。
啊,好吧......我又开始出现的Application_BeginRequest段()和Application_EndRequest结束它()。这不起作用。现在我已经把这个开始和结束包围了现在正在工作的AddException()。 – Auzzy
我对.NET Web体系结构不够了解以提供更多的帮助,但我想你可能想在某些预过滤器(代理)中创建网段到您的Web服务器代码,然后在某些后期处理中关闭该段。筛选(代理)到相同的Web服务器代码。 –