应用程序见解 - 例外添加信息

时间:2017-06-04 17:26:50

标签: c# azure exception-handling azure-application-insights

实际上,我在我的asp.net web API 2中设置了应用程序见解,以便按照步骤Diagnose exceptions in your web apps with Application Insights记录错误,一切正常,但是,我想为每个例外添加信息,例如, CustomerId,JobId等。

所以我希望通过Azure Application Insights(see this image)在异常(调用堆栈或其他属性)中看到这些数据。该信息可以帮助我检测我应该用来尝试复制错误场景的记录。

你能告诉我任何建议吗?

谢谢!

1 个答案:

答案 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);
            }
        }

您可以在以下所有属性中找到它:

enter image description here

  

但是还有其他问题,我怎样才能将数据从我的控制器发送到&#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;
            }

结果:

enter image description here enter image description here