Diagnostika výjimky ve webových aplikacích pomocí služby Application InsightsDiagnose exceptions in your web apps with Application Insights

Výjimky v živé webové aplikaci jsou hlášeny Application Insights.Exceptions in your live web app are reported by Application Insights. Neúspěšné žádosti s výjimkami a dalšími událostmi můžete korelovat na straně klienta i serveru, abyste mohli rychle diagnostikovat příčiny.You can correlate failed requests with exceptions and other events at both the client and server, so that you can quickly diagnose the causes.

Nastavení generování sestav výjimekSet up exception reporting

Diagnostika výjimek pomocí sady Visual StudioDiagnosing exceptions using Visual Studio

Otevřete řešení aplikace v aplikaci Visual Studio, které vám pomůžou s laděním.Open the app solution in Visual Studio to help with debugging.

Spusťte aplikaci, a to buď na vašem serveru, nebo na svém vývojovém počítači pomocí klávesy F5.Run the app, either on your server or on your development machine by using F5.

Otevřete okno Application Insights vyhledávání v sadě Visual Studio a nastavte ho tak, aby zobrazoval události z vaší aplikace.Open the Application Insights Search window in Visual Studio, and set it to display events from your app. Když ladíte, můžete to udělat pouhým kliknutím na tlačítko Application Insights.While you're debugging, you can do this just by clicking the Application Insights button.

Klikněte pravým tlačítkem na projekt a vyberte Application Insights, otevřít.

Všimněte si, že sestavu můžete filtrovat a zobrazit jenom výjimky.Notice that you can filter the report to show just exceptions.

Nezobrazuje se žádná výjimka? Viz zachytit výjimky.No exceptions showing? See Capture exceptions.

Kliknutím na sestavu výjimky zobrazíte její trasování zásobníku.Click an exception report to show its stack trace. Kliknutím na odkaz na řádek v trasování zásobníku otevřete příslušný soubor kódu.Click a line reference in the stack trace, to open the relevant code file.

V kódu si všimněte, že CodeLens zobrazuje data o výjimkách:In the code, notice that CodeLens shows data about the exceptions:

CodeLens upozornění na výjimky.

Diagnostika selhání pomocí Azure PortalDiagnosing failures using the Azure portal

Application Insights poskytuje s využitím prostředí APM, které vám umožní diagnostikovat chyby ve monitorovaných aplikacích.Application Insights comes with a curated APM experience to help you diagnose failures in your monitored applications. Spusťte kliknutím na možnost chyby v nabídce Application Insights prostředku, která se nachází v části prozkoumat.To start, click on the Failures option in the Application Insights resource menu located in the Investigate section. Mělo by se zobrazit zobrazení na celé obrazovce, které vám ukáže trendy při selhání vašich požadavků, kolik z nich selhává a kolik uživatelů má vliv.You should see a full-screen view that shows you the failure rate trends for your requests, how many of them are failing, and how many users are impacted. Napravo se zobrazí některé z nejužitečnějších distribucí, které jsou specifické pro vybranou operaci selhání, včetně hlavních tří kódů odpovědí, hlavních tří typů výjimek a hlavních tří neúspěšných typů závislostí.On the right, you'll see some of the most useful distributions specific to the selected failing operation, including top three response codes, top three exception types, and top three failing dependency types.

Zobrazení třídění podle selhání (karta operace)

Jediným kliknutím si můžete prohlédnout reprezentativní ukázky pro každou z těchto dílčích sad operací.In a single click, you can then review representative samples for each of these subsets of operations. Konkrétně pro diagnostiku výjimek můžete kliknout na počet konkrétních výjimek, které se mají zobrazit na kartě Podrobnosti transakce od začátku až do konce, jako je například tato:In particular, to diagnose exceptions, you can click on the count of a particular exception to be presented with the End-to-end transaction details tab, such as this one:

Karta podrobnosti transakce na konci

Místo toho , abyste si vyhledali výjimky konkrétní operace selhání, můžete začít z celkového zobrazení výjimek, a to přepnutím na kartu výjimky v horní části.Alternatively, instead of looking at exceptions of a specific failing operation, you can start from the overall view of exceptions, by switching to the Exceptions tab at the top. Tady vidíte všechny shromažďované výjimky pro monitorovanou aplikaci.Here you can see all the exceptions collected for your monitored app.

Nezobrazuje se žádná výjimka? Viz zachytit výjimky.No exceptions showing? See Capture exceptions.

Vlastní trasování a data protokoluCustom tracing and log data

Chcete-li získat diagnostická data specifická pro vaši aplikaci, můžete vložit kód, který bude odesílat vlastní data telemetrie.To get diagnostic data specific to your app, you can insert code to send your own telemetry data. Zobrazuje se v diagnostickém vyhledávání společně se žádostí, zobrazením stránky a dalšími automaticky shromážděnými daty.This displayed in diagnostic search alongside the request, page view, and other automatically collected data.

Máte několik možností:You have several options:

  • TrackEvent () se obvykle používá pro monitorování vzorců používání, ale data, která posílá, se zobrazí také v části vlastní události v diagnostickém vyhledávání.TrackEvent() is typically used for monitoring usage patterns, but the data it sends also appears under Custom Events in diagnostic search. Události se nazývají a můžou mít vlastnosti řetězce a číselné metriky, na kterých můžete filtrovat hledání v diagnostice.Events are named, and can carry string properties and numeric metrics on which you can filter your diagnostic searches.
  • TrackTrace () umožňuje odesílat delší data, jako jsou například informace o publikování.TrackTrace() lets you send longer data such as POST information.
  • TrackException () odesílá trasování zásobníku.TrackException() sends stack traces. Další informace o výjimkách.More about exceptions.
  • Pokud již používáte protokolovací rozhraní jako Log4Net nebo NLog, můžete tyto protokoly zachytit a zobrazit je ve vyhledávání diagnostiky společně s daty o požadavcích a výjimkách.If you already use a logging framework like Log4Net or NLog, you can capture those logs and see them in diagnostic search alongside request and exception data.

Chcete-li zobrazit tyto události, otevřete vyhledávání v nabídce vlevo, vyberte typy událostírozevírací nabídky a pak zvolte vlastní událost, trasování nebo výjimka.To see these events, open Search from the left menu, select the drop-down menu Event types, and then choose Custom Event, Trace, or Exception.

Podrobná analýza

Poznámka

Pokud vaše aplikace generuje mnoho telemetrických dat, sníží modul adaptivního vzorkování automaticky objem dat odesílaných na portál tím, že budou odesílány pouze reprezentativní vzorky událostí.If your app generates a lot of telemetry, the adaptive sampling module will automatically reduce the volume that is sent to the portal by sending only a representative fraction of events. Události, které jsou součástí stejné operace, se vyberou nebo zruší výběr jako skupina, takže můžete přecházet mezi souvisejícími událostmi.Events that are part of the same operation will be selected or deselected as a group, so that you can navigate between related events. Přečtěte si o vzorkování.Learn about sampling.

Jak zobrazit data žádosti o odesláníHow to see request POST data

Podrobnosti žádosti neobsahují data odesílaná do aplikace v příspěvku.Request details don't include the data sent to your app in a POST call. Pokud chcete mít tato data nahlášená:To have this data reported:

  • Nainstalujte sadu SDK do projektu aplikace.Install the SDK in your application project.
  • Do aplikace vložte kód pro volání Microsoft. ApplicationInsights. TrackTrace ().Insert code in your application to call Microsoft.ApplicationInsights.TrackTrace(). Odešlete data POST v parametru zprávy.Send the POST data in the message parameter. Povolená velikost je omezena, proto byste se měli pokusit odeslat jenom základní data.There is a limit to the permitted size, so you should try to send just the essential data.
  • Při prošetření neúspěšného požadavku Najděte přidružená trasování.When you investigate a failed request, find the associated traces.

Nejdříve se na portálu nezobrazí všechny výjimky, které způsobují chyby ve vaší aplikaci.At first, you won't see in the portal all the exceptions that cause failures in your app. Zobrazí se všechny výjimky prohlížeče (Pokud používáte sadu JavaScript SDK na webových stránkách).You'll see any browser exceptions (if you're using the JavaScript SDK in your web pages). Ale většina výjimek serveru je zachycena službou IIS a je nutné napsat bitovou kopii pro jejich zobrazení.But most server exceptions are caught by IIS and you have to write a bit of code to see them.

Další možnosti:You can:

  • Protokolujte výjimky explicitně vložením kódu do obslužných rutin výjimek pro hlášení výjimek.Log exceptions explicitly by inserting code in exception handlers to report the exceptions.
  • Automatické zachycení výjimek konfigurací architektury ASP.NETCapture exceptions automatically by configuring your ASP.NET framework. Nezbytné doplňky jsou odlišné pro různé typy rozhraní.The necessary additions are different for different types of framework.

Explicitní generování výjimekReporting exceptions explicitly

Nejjednodušší způsob je vložení volání TrackException () do obslužné rutiny výjimky.The simplest way is to insert a call to TrackException() in an exception handler.

    try
    { ...
    }
    catch (ex)
    {
      appInsights.trackException(ex, "handler loc",
        {Game: currentGame.Name,
         State: currentGame.State.ToString()});
    }
    var telemetry = new TelemetryClient();
    ...
    try
    { ...
    }
    catch (Exception ex)
    {
       // Set up some properties:
       var properties = new Dictionary <string, string>
         {{"Game", currentGame.Name}};

       var measurements = new Dictionary <string, double>
         {{"Users", currentGame.Users.Count}};

       // Send the exception telemetry:
       telemetry.TrackException(ex, properties, measurements);
    }
    Dim telemetry = New TelemetryClient
    ...
    Try
      ...
    Catch ex as Exception
      ' Set up some properties:
      Dim properties = New Dictionary (Of String, String)
      properties.Add("Game", currentGame.Name)

      Dim measurements = New Dictionary (Of String, Double)
      measurements.Add("Users", currentGame.Users.Count)

      ' Send the exception telemetry:
      telemetry.TrackException(ex, properties, measurements)
    End Try

Parametry vlastností a měření jsou volitelné, ale jsou užitečné pro filtrování a přidání dalších informací.The properties and measurements parameters are optional, but are useful for filtering and adding extra information. Například pokud máte aplikaci, která může spustit několik her, můžete najít všechny zprávy o výjimkách, které souvisejí s určitou hrou.For example, if you have an app that can run several games, you could find all the exception reports related to a particular game. Do každého slovníku můžete přidat tolik položek, kolik jich chcete.You can add as many items as you like to each dictionary.

Výjimky prohlížečůBrowser exceptions

Je nahlášena většina výjimek prohlížeče.Most browser exceptions are reported.

Pokud vaše webová stránka obsahuje soubory skriptu ze sítě pro doručování obsahu nebo jiné domény, ujistěte se, že značka skriptu má atribut crossorigin="anonymous" a že server posílá hlavičky CORS.If your web page includes script files from content delivery networks or other domains, ensure your script tag has the attribute crossorigin="anonymous", and that the server sends CORS headers. To vám umožní získat trasování zásobníku a podrobnosti o neošetřených výjimkách JavaScriptu z těchto prostředků.This will allow you to get a stack trace and detail for unhandled JavaScript exceptions from these resources.

Opětovné použití klienta telemetrieReuse your telemetry client

Poznámka

TelemetryClient se doporučuje vytvořit instanci jednou a znovu použít po celou dobu životnosti aplikace.TelemetryClient is recommended to be instantiated once and re-used throughout the life of an application.

Níže je příklad použití TelemetryClient správně.Below is an example using TelemetryClient correctly.

public class GoodController : ApiController
{
    // OK
    private static readonly TelemetryClient telemetryClient;

    static GoodController()
    {
        telemetryClient = new TelemetryClient();
    }
}

Webové formulářeWeb forms

V případě webových formulářů bude modul HTTP moci shromažďovat výjimky, pokud nejsou nakonfigurována žádná přesměrování nakonfigurovaná pomocí CustomErrors.For web forms, the HTTP Module will be able to collect the exceptions when there are no redirects configured with CustomErrors.

Pokud ale máte aktivní přesměrování, přidejte následující řádky do funkce Application_Error v Global.asax.cs.But if you have active redirects, add the following lines to the Application_Error function in Global.asax.cs. (Přidejte soubor Global. asax, pokud ho ještě nemáte.)(Add a Global.asax file if you don't already have one.)

    void Application_Error(object sender, EventArgs e)
    {
      if (HttpContext.Current.IsCustomErrorEnabled && Server.GetLastError () != null)
      {
         var ai = new TelemetryClient(); // or re-use an existing instance

         ai.TrackException(Server.GetLastError());
      }
    }

MVCMVC

Počínaje verzí Application Insights web SDK verze 2,6 (beta3 a novější) Application Insights shromažďuje neošetřené výjimky vyvolané v metodách řadičů MVC 5 + automaticky.Starting with Application Insights Web SDK version 2.6 (beta3 and later), Application Insights collects unhandled exceptions thrown in the MVC 5+ controllers methods automatically. Pokud jste dříve přidali vlastní obslužnou rutinu ke sledování takových výjimek (jak je popsáno v následujících příkladech), je možné ji odebrat, aby nedocházelo k dvojímu sledování výjimek.If you have previously added a custom handler to track such exceptions (as described in following examples), you may remove it to prevent double tracking of exceptions.

Existuje několik případů, kdy filtry výjimek nemůžou zpracovat.There are a number of cases that the exception filters cannot handle. Příklad:For example:

  • Výjimky vyvolané z konstruktorů kontroleru.Exceptions thrown from controller constructors.
  • Výjimky vyvolané z obslužných rutin zprávExceptions thrown from message handlers.
  • Během směrování byly vyvolány výjimky.Exceptions thrown during routing.
  • Výjimky vyvolané při serializaci obsahu odpovědiExceptions thrown during response content serialization.
  • Při spouštění aplikace došlo k výjimce.Exception thrown during application start-up.
  • V úlohách na pozadí byla vyvolána výjimka.Exception thrown in background tasks.

Všechny výjimky, které aplikace zpracovává , je stále nutné sledovat ručně.All exceptions handled by application still need to be tracked manually. Neošetřené výjimky, které pocházejí z řadičů, obvykle způsobují odpověď 500 "interní chyba serveru".Unhandled exceptions originating from controllers typically result in 500 "Internal Server Error" response. Pokud je taková odpověď manuálně vytvořená jako výsledek ošetřené výjimky (nebo žádná výjimka vůbec), je sledována v odpovídající telemetrii žádostí s ResultCode 500, ale Application Insights SDK nemůže sledovat odpovídající výjimku.If such response is manually constructed as a result of handled exception (or no exception at all) it is tracked in corresponding request telemetry with ResultCode 500, however Application Insights SDK is unable to track corresponding exception.

Podpora předchozích verzíPrior versions support

Pokud používáte MVC 4 (a předchozí) Application Insights web SDK 2,5 (a předchozí), Sledujte výjimky v následujících příkladech.If you use MVC 4 (and prior) of Application Insights Web SDK 2.5 (and prior), refer to the following examples to track exceptions.

Pokud je konfigurace customErrors Off , budou k dispozici výjimky pro modul HTTP ke shromáždění.If the CustomErrors configuration is Off, then exceptions will be available for the HTTP Module to collect. Pokud je však RemoteOnly (výchozí) nebo On , bude výjimka vymazána a nebude k dispozici pro Application Insights pro automatické shromáždění.However, if it is RemoteOnly (default), or On, then the exception will be cleared and not available for Application Insights to automatically collect. Můžete to opravit přepsáním třídy System. Web. Mvc. HandleErrorAttributea použitím přepsané třídy, jak je znázorněno pro různé verze MVC níže (zdroj GitHubu):You can fix that by overriding the System.Web.Mvc.HandleErrorAttribute class, and applying the overridden class as shown for the different MVC versions below (GitHub source):

    using System;
    using System.Web.Mvc;
    using Microsoft.ApplicationInsights;

    namespace MVC2App.Controllers
    {
      [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
      public class AiHandleErrorAttribute : HandleErrorAttribute
      {
        public override void OnException(ExceptionContext filterContext)
        {
            if (filterContext != null && filterContext.HttpContext != null && filterContext.Exception != null)
            {
                //If customError is Off, then AI HTTPModule will report the exception
                if (filterContext.HttpContext.IsCustomErrorEnabled)
                {   //or reuse instance (recommended!). see note above
                    var ai = new TelemetryClient();
                    ai.TrackException(filterContext.Exception);
                }
            }
            base.OnException(filterContext);
        }
      }
    }

MVC 2MVC 2

Nahraďte atribut HandleError novým atributem v řadičích.Replace the HandleError attribute with your new attribute in your controllers.

    namespace MVC2App.Controllers
    {
        [AiHandleError]
        public class HomeController : Controller
        {
    ...

UkázkaSample

MVC 3MVC 3

Zaregistrujte AiHandleErrorAttribute se jako globální filtr v Global.asax.cs:Register AiHandleErrorAttribute as a global filter in Global.asax.cs:

    public class MyMvcApplication : System.Web.HttpApplication
    {
      public static void RegisterGlobalFilters(GlobalFilterCollection filters)
      {
         filters.Add(new AiHandleErrorAttribute());
      }
     ...

UkázkaSample

MVC 4, MVC5MVC 4, MVC5

Zaregistrujte AiHandleErrorAttribute jako globální filtr v FilterConfig.cs:Register AiHandleErrorAttribute as a global filter in FilterConfig.cs:

    public class FilterConfig
    {
      public static void RegisterGlobalFilters(GlobalFilterCollection filters)
      {
        // Default replaced with the override to track unhandled exceptions
        filters.Add(new AiHandleErrorAttribute());
      }
    }

UkázkaSample

Webové rozhraní APIWeb API

Počínaje verzí Application Insights web SDK verze 2,6 (beta3 a novější) Application Insights shromažďuje neošetřené výjimky, které jsou vyvolány v metodách kontroleru automaticky pro WebAPI 2 +.Starting with Application Insights Web SDK version 2.6 (beta3 and later), Application Insights collects unhandled exceptions thrown in the controller methods automatically for WebAPI 2+. Pokud jste dříve přidali vlastní obslužnou rutinu ke sledování takových výjimek (jak je popsáno v následujících příkladech), je možné ji odebrat, aby nedocházelo k dvojímu sledování výjimek.If you have previously added a custom handler to track such exceptions (as described in following examples), you may remove it to prevent double tracking of exceptions.

Existuje několik případů, kdy filtry výjimek nemůžou zpracovat.There are a number of cases that the exception filters cannot handle. Příklad:For example:

  • Výjimky vyvolané z konstruktorů kontroleru.Exceptions thrown from controller constructors.
  • Výjimky vyvolané z obslužných rutin zprávExceptions thrown from message handlers.
  • Během směrování byly vyvolány výjimky.Exceptions thrown during routing.
  • Výjimky vyvolané při serializaci obsahu odpovědiExceptions thrown during response content serialization.
  • Při spouštění aplikace došlo k výjimce.Exception thrown during application start-up.
  • V úlohách na pozadí byla vyvolána výjimka.Exception thrown in background tasks.

Všechny výjimky, které aplikace zpracovává , je stále nutné sledovat ručně.All exceptions handled by application still need to be tracked manually. Neošetřené výjimky, které pocházejí z řadičů, obvykle způsobují odpověď 500 "interní chyba serveru".Unhandled exceptions originating from controllers typically result in 500 "Internal Server Error" response. Pokud je taková odpověď manuálně vytvořená jako výsledek ošetřené výjimky (nebo žádná výjimka vůbec), je sledována v odpovídající telemetrii žádosti s ResultCode 500, ale Application Insights SDK nemůže sledovat odpovídající výjimku.If such response is manually constructed as a result of handled exception (or no exception at all) it is tracked in a corresponding request telemetry with ResultCode 500, however Application Insights SDK is unable to track corresponding exception.

Podpora předchozích verzíPrior versions support

Pokud používáte WebAPI 1 (a předchozí) Application Insights web SDK 2,5 (a předchozí), Sledujte výjimky v následujících příkladech.If you use WebAPI 1 (and prior) of Application Insights Web SDK 2.5 (and prior), refer to the following examples to track exceptions.

Webové rozhraní API 1. xWeb API 1.x

Přepsat System. Web. http. filters. ExceptionFilterAttribute:Override System.Web.Http.Filters.ExceptionFilterAttribute:

    using System.Web.Http.Filters;
    using Microsoft.ApplicationInsights;

    namespace WebAPI.App_Start
    {
      public class AiExceptionFilterAttribute : ExceptionFilterAttribute
      {
        public override void OnException(HttpActionExecutedContext actionExecutedContext)
        {
            if (actionExecutedContext != null && actionExecutedContext.Exception != null)
            {  //or reuse instance (recommended!). see note above
                var ai = new TelemetryClient();
                ai.TrackException(actionExecutedContext.Exception);
            }
            base.OnException(actionExecutedContext);
        }
      }
    }

Tento přepsaný atribut můžete přidat na konkrétní řadiče nebo ho přidat do konfigurace globálního filtru ve třídě WebApiConfig:You could add this overridden attribute to specific controllers, or add it to the global filter configuration in the WebApiConfig class:

    using System.Web.Http;
    using WebApi1.x.App_Start;

    namespace WebApi1.x
    {
      public static class WebApiConfig
      {
        public static void Register(HttpConfiguration config)
        {
            config.Routes.MapHttpRoute(name: "DefaultApi", routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional });
            ...
            config.EnableSystemDiagnosticsTracing();

            // Capture exceptions for Application Insights:
            config.Filters.Add(new AiExceptionFilterAttribute());
        }
      }
    }

UkázkaSample

Webové rozhraní API 2. xWeb API 2.x

Přidejte implementaci IExceptionLogger:Add an implementation of IExceptionLogger:

    using System.Web.Http.ExceptionHandling;
    using Microsoft.ApplicationInsights;

    namespace ProductsAppPureWebAPI.App_Start
    {
      public class AiExceptionLogger : ExceptionLogger
      {
        public override void Log(ExceptionLoggerContext context)
        {
            if (context !=null && context.Exception != null)
            {//or reuse instance (recommended!). see note above
                var ai = new TelemetryClient();
                ai.TrackException(context.Exception);
            }
            base.Log(context);
        }
      }
    }

Přidejte ho ke službám v WebApiConfig:Add this to the services in WebApiConfig:

    using System.Web.Http;
    using System.Web.Http.ExceptionHandling;
    using ProductsAppPureWebAPI.App_Start;

    namespace WebApi2WithMVC
    {
      public static class WebApiConfig
      {
        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());
        }
      }
     }

UkázkaSample

Jako alternativy můžete:As alternatives, you could:

  1. Nahraďte pouze ExceptionHandler vlastní implementací IExceptionHandler.Replace the only ExceptionHandler with a custom implementation of IExceptionHandler. Tato metoda se volá jenom v případě, že rozhraní stále dokáže zvolit, která odpověď se má odeslat (ne když je připojení přerušené).This is only called when the framework is still able to choose which response message to send (not when the connection is aborted for instance)
  2. Filtry výjimek (jak je popsáno v části na řadičích webového rozhraní API 1. x výše) – nevolá se ve všech případech.Exception Filters (as described in the section on Web API 1.x controllers above) - not called in all cases.

WCFWCF

Přidejte třídu, která rozšiřuje atribut a implementuje IErrorHandler a IServiceBehavior.Add a class that extends Attribute and implements IErrorHandler and IServiceBehavior.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.ServiceModel.Description;
    using System.ServiceModel.Dispatcher;
    using System.Web;
    using Microsoft.ApplicationInsights;

    namespace WcfService4.ErrorHandling
    {
      public class AiLogExceptionAttribute : Attribute, IErrorHandler, IServiceBehavior
      {
        public void AddBindingParameters(ServiceDescription serviceDescription,
            System.ServiceModel.ServiceHostBase serviceHostBase,
            System.Collections.ObjectModel.Collection<ServiceEndpoint> endpoints,
            System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
        {
        }

        public void ApplyDispatchBehavior(ServiceDescription serviceDescription,
            System.ServiceModel.ServiceHostBase serviceHostBase)
        {
            foreach (ChannelDispatcher disp in serviceHostBase.ChannelDispatchers)
            {
                disp.ErrorHandlers.Add(this);
            }
        }

        public void Validate(ServiceDescription serviceDescription,
            System.ServiceModel.ServiceHostBase serviceHostBase)
        {
        }

        bool IErrorHandler.HandleError(Exception error)
        {//or reuse instance (recommended!). see note above
            var ai = new TelemetryClient();

            ai.TrackException(error);
            return false;
        }

        void IErrorHandler.ProvideFault(Exception error,
            System.ServiceModel.Channels.MessageVersion version,
            ref System.ServiceModel.Channels.Message fault)
        {
        }
      }
    }

Add the attribute to the service implementations:

    namespace WcfService4
    {
        [AiLogException]
        public class Service1 : IService1
        {
         ...

UkázkaSample

Čítače výkonu výjimekException performance counters

Pokud jste na server nainstalovali agenta Application Insights , můžete získat graf četnosti výjimek měřených rozhraním .NET.If you have installed the Application Insights Agent on your server, you can get a chart of the exceptions rate, measured by .NET. To zahrnuje jak zpracované, tak neošetřené výjimky rozhraní .NET.This includes both handled and unhandled .NET exceptions.

Otevřete kartu Průzkumník metrik, přidejte nový graf a vyberte možnost míra výjimek, která je uvedena v části čítače výkonu.Open a Metric Explorer tab, add a new chart, and select Exception rate, listed under Performance Counters.

Rozhraní .NET Framework vypočítá sazbu tak, že spočítá počet výjimek v intervalu a vydělí délku intervalu.The .NET framework calculates the rate by counting the number of exceptions in an interval and dividing by the length of the interval.

To se liší od počtu Exceptions vypočítaného Application Insights portálem pro počítání sestav TrackException.This is different from the 'Exceptions' count calculated by the Application Insights portal counting TrackException reports. Intervaly vzorkování se liší a sada SDK neodesílá sestavy TrackException pro všechny zpracovávané a neošetřené výjimky.The sampling intervals are different, and the SDK doesn't send TrackException reports for all handled and unhandled exceptions.

Další krokyNext steps