实际上,我在我的asp.net web API 2中设置了应用程序见解,以便按照步骤Diagnose exceptions in your web apps with Application Insights记录错误,一切正常,但是,我想为每个例外添加信息,例如, CustomerId,JobId等。
所以我希望通过Azure Application Insights(see this image)在异常(调用堆栈或其他属性)中看到这些数据。该信息可以帮助我检测我应该用来尝试复制错误场景的记录。
你能告诉我任何建议吗?
谢谢!
答案 0 :(得分:9)
据我所知,TelemetryClient.TrackException可以添加自定义属性。
添加这些属性后,您可以在azure洞察门户中找到值。
有关如何在web api中添加自定义属性的更多详细信息,请参阅以下代码:
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
//config.Services.Add(typeof(IExceptionLogger), new AiExceptionLogger());
config.Filters.Add(new AAA());
}
public class AAA : ActionFilterAttribute
{
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
if (actionExecutedContext.Exception != null)
{
var ai = new TelemetryClient();
//here get the arguments
string d1 = (string)actionExecutedContext.ActionContext.ActionArguments["id"];
var properties = new Dictionary<string, string> { { "Users", d1 } };
ai.TrackException(actionExecutedContext.Exception, properties);
}
base.OnActionExecuted(actionExecutedContext);
}
}
您可以在以下所有属性中找到它:
但是还有其他问题,我怎样才能将数据从我的控制器发送到&#34; AiExceptionLogger&#34;。即:我的控制器有POST方法Post(user,jobId),我想将jobId添加到TrackException。注意:我不想对我的控制器中的每个方法使用try {} catch(){},如果我可以将该信息添加到上下文中,那将是grat!。谢谢!
根据您的描述,我建议您尝试另一种方式注册过滤器并覆盖OnActionExecuted方法。
在此方法中,您可以首先检查Exception是否为null。如果异常不为null,则可以从HttpActionExecutedContext获取ActionArguments。
然后,您可以在属性中添加此参数,并将它们发送到azure Application Insights。
更多细节,您可以参考以下代码:
WebApiConfig:
rewrite ^/api/?(.*)$ /webservice/dispatcher.php?url=$1 last;
rewrite ^/([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$1$2$3.jpg last;
rewrite ^/([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$1$2$3$4.jpg last;
rewrite ^/([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$3/$1$2$3$4$5.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$3/$4/$1$2$3$4$5$6.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$3/$4/$5/$1$2$3$4$5$6$7.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$1$2$3$4$5$6$7$8.jpg last;
rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$1$2$3$4$5$6$7$8$9.jpg l$
rewrite ^/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])(-[_a-zA-Z0-9-]*)?(-[0-9]+)?/.+.jpg$ /img/p/$1/$2/$3/$4/$5/$6/$7/$8/$1$2$3$4$5$6$7$
rewrite ^/c/([0-9]+)(-[.*_a-zA-Z0-9-]*)(-[0-9]+)?/.+.jpg$ /img/c/$1$2$3.jpg last;
rewrite ^/c/([a-zA-Z_-]+)(-[0-9]+)?/.+.jpg$ /img/c/$1$2.jpg last;
rewrite ^/images_ie/?([^/]+).(jpe?g|png|gif)$ /js/jquery/plugins/fancybox/images/$1.$2 last;
rewrite ^/order$ /index.php?controller=order last;
# Symfony controllers
location ~ /(international|_profiler|module|product|combination|specific-price)/(.*)$ {
try_files $uri $uri/ /index.php?q=$uri&$args $admin_dir/index.php$is_args$args;
}
结果: