Diagnostizieren von Ausnahmen in Ihren Web-Apps mit Application InsightsDiagnose exceptions in your web apps with Application Insights

Ausnahmen in Ihrer Live-Web-App werden von Application Insights gemeldet.Exceptions in your live web app are reported by Application Insights. Auf diese Weise können Sie Anforderungsfehler mit Ausnahmen und anderen Ereignissen auf dem Client und auf dem Server zueinander in Beziehung setzen und dadurch die Ursachen schnell diagnostizieren.You can correlate failed requests with exceptions and other events at both the client and server, so that you can quickly diagnose the causes.

Einrichten der AusnahmeerfassungSet up exception reporting

Diagnostizieren von Ausnahmen mithilfe von Visual StudioDiagnosing exceptions using Visual Studio

Öffnen Sie für das Debuggen die App-Projektmappe in Visual Studio.Open the app solution in Visual Studio to help with debugging.

Führen Sie die App entweder auf dem Server oder Ihrem Entwicklungscomputer aus, indem Sie F5 drücken.Run the app, either on your server or on your development machine by using F5.

Öffnen Sie das Application Insights-Fenster „Suchen“ in Visual Studio, und legen Sie es auf auf das Anzeigen von Ereignissen aus Ihrer App fest.Open the Application Insights Search window in Visual Studio, and set it to display events from your app. Während Sie debuggen, können Sie dazu einfach auf die Schaltfläche „Application Insights“ klicken.While you're debugging, you can do this just by clicking the Application Insights button.

Klicken Sie mit der rechten Maustaste auf das Projekt, und wählen Sie „Application Insights > Öffnen“ aus.

Beachten Sie, dass Sie den Bericht so filtern können, dass nur Ausnahmen angezeigt werden.Notice that you can filter the report to show just exceptions.

Es werden keine Ausnahmen angezeigt? Informationen hierzu finden Sie unter Erfassen von Ausnahmen.No exceptions showing? See Capture exceptions.

Klicken Sie auf einen Ausnahmebericht, um dessen Stapelüberwachung anzuzeigen.Click an exception report to show its stack trace. Klicken Sie in der Stapelüberwachung auf einen Zeilenverweis, um die entsprechende Codedatei zu öffnen.Click a line reference in the stack trace, to open the relevant code file.

Beachten Sie, dass CodeLens im Code Daten zu den Ausnahmen anzeigt:In the code, notice that CodeLens shows data about the exceptions:

CodeLens-Benachrichtigung über Ausnahmen.

Diagnostizieren von Fehlern im Azure-PortalDiagnosing failures using the Azure portal

Application Insights umfasst eine kuratierte APM-Benutzeroberfläche, die Sie beim Diagnostizieren von Fehlern in Ihren überwachten Anwendungen unterstützt.Application Insights comes with a curated APM experience to help you diagnose failures in your monitored applications. Klicken Sie zum Starten auf die Option „Fehler“ im Application Insights-Ressourcenmenü, das Sie im Abschnitt „Untersuchen“ finden.To start, click on the Failures option in the Application Insights resource menu located in the Investigate section. Daraufhin wird eine Vollbildansicht geöffnet, die die Fehlerratentrends für Ihre Anforderungen anzeigt und Informationen dazu bietet, bei wie vielen Anforderungen Fehler auftreten und wie viele Benutzer betroffen sind.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. Auf der rechten Seite sehen Sie einige der nützlichsten Verteilungen für den ausgewählten fehlerhaften Vorgang, einschließlich der Top-3-Antwortcodes, der Top-3-Ausnahmetypen und der Top-3-Abhängigkeitstypen mit Fehlern.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.

Ansicht der Fehlerselektierung (Registerkarte mit Vorgängen)

Mit nur einem Klick können Sie dann repräsentative Stichproben für jede dieser Vorgangsteilmengen überprüfen.In a single click, you can then review representative samples for each of these subsets of operations. Um Ausnahmen zu diagnostizieren, können Sie auf die Anzahl einer bestimmten Ausnahme klicken. Daraufhin wird eine Registerkarte mit ausführlichen Informationen zur gesamten Transaktion angezeigt, wie z.B. die folgende: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:

Registerkarte mit ausführlichen Transaktionsdetails

Alternativ zur Anzeige von Ausnahmen eines bestimmten fehlerhaften Vorgangs können Sie mit der Gesamtübersicht der Ausnahmen beginnen, indem Sie zur Registerkarte „Ausnahmen“ im oberen Bereich wechseln.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. Hier können Sie alle Ausnahmen anzeigen, die für Ihre überwachte App erfasst wurden.Here you can see all the exceptions collected for your monitored app.

Es werden keine Ausnahmen angezeigt? Informationen hierzu finden Sie unter Erfassen von Ausnahmen.No exceptions showing? See Capture exceptions.

Benutzerdefinierte Ablaufverfolgung und ProtokolldatenCustom tracing and log data

Um spezifische Diagnosedaten für Ihre App zu erhalten, können Sie Code zum Senden Ihrer eigenen Telemetriedaten einfügen.To get diagnostic data specific to your app, you can insert code to send your own telemetry data. Diese werden in der Diagnosesuche neben der Anforderung, der Seitenansicht und weiteren automatisch erfassten Daten angezeigt.This displayed in diagnostic search alongside the request, page view, and other automatically collected data.

Sie haben mehrere Möglichkeiten:You have several options:

  • TrackEvent() wird normalerweise zum Überwachen von Verwendungsmustern verwendet, jedoch werden die damit gesendeten Daten auch unter den benutzerdefinierten Ereignissen in der Diagnosesuche angezeigt.TrackEvent() is typically used for monitoring usage patterns, but the data it sends also appears under Custom Events in diagnostic search. Ereignisse werden benannt und können Zeichenfolgeneigenschaften und numerische Metriken aufweisen, nach denen Sie Ihre Diagnosesuchvorgänge filtern können.Events are named, and can carry string properties and numeric metrics on which you can filter your diagnostic searches.
  • TrackTrace() können Sie längere Daten wie POST-Informationen senden.TrackTrace() lets you send longer data such as POST information.
  • TrackException() sendet Stapelüberwachungen.TrackException() sends stack traces. Weitere Informationen über Ausnahmen.More about exceptions.
  • Wenn Sie bereits ein Protokollierungsframework wie Log4Net oder NLog verwenden, können Sie diese Protokolle erfassen und in der Diagnosesuche neben Anforderungs- und Ausnahmedaten anzeigen.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.

Um diese Ereignisse anzuzeigen, öffnen Sie im Menü links die Suche, wählen Sie das Dropdownmenü Ereignistypen aus, und wählen Sie dann „Benutzerdefiniertes Ereignis“, „Ablaufverfolgung“ oder „Ausnahme“ aus.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.

Drillthrough

Hinweis

Wenn die Anwendung viele Telemetriedaten generiert, reduziert das adaptive Stichprobenmodul automatisch die an das Verwaltungsportal gesendete Datenmenge, indem nur ein repräsentativer Bruchteil der Ereignisse gesendet wird.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. Ereignisse, die Teil des gleichen Vorgangs sind, werden als Gruppe aus- oder abgewählt, sodass Sie zwischen verwandten Ereignissen navigieren können.Events that are part of the same operation will be selected or deselected as a group, so that you can navigate between related events. Erfahren Sie mehr über das Erstellen von Stichproben.Learn about sampling.

Anzeigen von POST-Daten von AnforderungenHow to see request POST data

Anforderungsdetails enthalten nicht die Daten, die in einem POST-Aufruf an Ihre App gesendet wurden.Request details don't include the data sent to your app in a POST call. So werden diese Daten gemeldet:To have this data reported:

  • Installieren Sie das SDK in Ihrem Anwendungsprojekt.Install the SDK in your application project.
  • Fügen Sie Code in die Anwendung ein, um Microsoft.ApplicationInsights.TrackTrace() aufzurufen.Insert code in your application to call Microsoft.ApplicationInsights.TrackTrace(). Senden Sie die POST-Daten im "message"-Parameter.Send the POST data in the message parameter. Es gibt eine Größenbeschränkung, daher sollten Sie versuchen, nur die notwendigen Daten zu senden.There is a limit to the permitted size, so you should try to send just the essential data.
  • Wenn Sie eine fehlerhafte Anforderung untersuchen, suchen Sie die zugehörigen Ablaufverfolgungen.When you investigate a failed request, find the associated traces.

Erfassen von Ausnahmen und zugehörigen DiagnosedatenCapturing exceptions and related diagnostic data

Zunächst werden im Portal nicht alle Ausnahmen angezeigt, die in Ihrer App zu Fehlern führen.At first, you won't see in the portal all the exceptions that cause failures in your app. Sie sehen alle Browserausnahmen (bei Verwendung des JavaScript-SDK in Ihren Webseiten).You'll see any browser exceptions (if you're using the JavaScript SDK in your web pages). Die meisten Serverausnahmen werden jedoch von IIS abgefangen, und Sie müssen ein wenig Code schreiben, um sie anzuzeigen.But most server exceptions are caught by IIS and you have to write a bit of code to see them.

Ihre Möglichkeiten:You can:

  • Ausnahmen explizit protokollieren durch Einfügen von Code in Ausnahmehandlern, um Ausnahmen zu melden.Log exceptions explicitly by inserting code in exception handlers to report the exceptions.
  • Ausnahmen automatisch erfassen durch Konfigurieren Ihres ASP.NET-Frameworks.Capture exceptions automatically by configuring your ASP.NET framework. Die erforderlichen Änderungen unterscheiden sich für verschiedene Frameworktypen.The necessary additions are different for different types of framework.

Explizites Melden von AusnahmenReporting exceptions explicitly

Am einfachsten ist es, in einem Ausnahmehandler einen Aufruf in TrackException() einzufügen.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

Die Eigenschaften und Messparameter sind optional, aber hilfreich zum Filtern und Hinzufügen zusätzlicher Informationen.The properties and measurements parameters are optional, but are useful for filtering and adding extra information. Wenn Sie z. B. eine Anwendung haben, die mehrere Spiele ausführen kann, können Sie alle im Zusammenhang mit einem bestimmten Spiel stehenden Ausnahmeberichte ermitteln.For example, if you have an app that can run several games, you could find all the exception reports related to a particular game. Sie können jedem Wörterbuch beliebig viele Elemente hinzufügen.You can add as many items as you like to each dictionary.

BrowserausnahmenBrowser exceptions

Die meisten Browserausnahmen werden gemeldet.Most browser exceptions are reported.

Wenn Ihre Webseite Skriptdateien aus Content Delivery Networks oder anderen Domänen umfasst, stellen Sie sicher, dass Ihr Skript-Tag das Attribut crossorigin="anonymous" besitzt und dass der Server CORS-Header sendet.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. Dadurch können Sie eine Stapelüberwachung und Details für nicht behandelte JavaScript-Ausnahmen von diesen Ressourcen erhalten.This will allow you to get a stack trace and detail for unhandled JavaScript exceptions from these resources.

Wiederverwenden Ihres TelemetrieclientsReuse your telemetry client

Hinweis

Es wird empfohlen, TelemetryClient einmal zu instanziieren und über die gesamte Lebensdauer einer Anwendung hinweg wiederzuverwenden.TelemetryClient is recommended to be instantiated once and re-used throughout the life of an application.

Nachstehend finden Sie ein Beispiel für die ordnungsgemäße Verwendung von TelemetryClient.Below is an example using TelemetryClient correctly.

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

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

WebformulareWeb forms

Für Webformulare kann das HTTP-Modul die Ausnahmen erfassen, wenn keine Umleitungen mit CustomErrors konfiguriert sind.For web forms, the HTTP Module will be able to collect the exceptions when there are no redirects configured with CustomErrors.

Wenn jedoch aktive Umleitungen bestehen, fügen Sie der Funktion "Application_Error" in "Global.asax.cs" die folgenden Zeilen hinzu.But if you have active redirects, add the following lines to the Application_Error function in Global.asax.cs. (Fügen Sie eine Datei "Global.asax" hinzu, falls noch keine vorhanden ist.)(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

Ab Application Insights Web SDK Version 2.6 (beta3 und höher) sammelt Application Insights Ausnahmefehler automatisch, die in den MVC 5+-Controllermethoden ausgelöst werden.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. Wenn Sie bereits vorher einen benutzerdefinierten Handler zum Nachverfolgen dieser Ausnahmen hinzugefügt haben (wie in den folgenden Beispielen beschrieben), können Sie ihn entfernen, um eine doppelte Nachverfolgung von Ausnahmen zu verhindern.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.

Es gibt eine Reihe von Fällen, die von den Ausnahmefiltern nicht verarbeitet werden können.There are a number of cases that the exception filters cannot handle. Beispiel:For example:

  • Von Controllerkonstruktoren ausgelöste Ausnahmen.Exceptions thrown from controller constructors.
  • Von Meldungshandlern ausgelöste AusnahmenExceptions thrown from message handlers.
  • Während des Routings ausgelöste Ausnahmen.Exceptions thrown during routing.
  • Während der Serialisierung von Antwortinhalten ausgelöste Ausnahmen.Exceptions thrown during response content serialization.
  • Ausnahme, die während des Anwendungsstarts ausgelöst wird.Exception thrown during application start-up.
  • In Hintergrundaufgaben ausgelöste Ausnahme.Exception thrown in background tasks.

Alle Ausnahmen die von der Anwendung verarbeitet werden, müssen weiterhin manuell nachverfolgt werden.All exceptions handled by application still need to be tracked manually. Ausnahmefehler, die von Controllern ausgehen, führen normalerweise zu folgender Antwort: 500 „Interner Serverfehler“.Unhandled exceptions originating from controllers typically result in 500 "Internal Server Error" response. Wenn eine Antwort dieser Art aufgrund einer behandelten Ausnahme (oder keiner Ausnahme) manuell erstellt wird, wird sie in der dazugehörigen Anforderungstelemetrie mit „ResultCode 500“ nachverfolgt. Mit dem Application Insights SDK kann die entsprechende Ausnahme aber nicht nachverfolgt werden.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.

Unterstützung von früheren VersionenPrior versions support

Wenn Sie MVC 4 (und früher) des Application Insights Web SDK 2.5 (und früher) verwenden, sind die folgenden Beispiele zum Nachverfolgen von Ausnahmen hilfreich.If you use MVC 4 (and prior) of Application Insights Web SDK 2.5 (and prior), refer to the following examples to track exceptions.

Wenn die CustomErrors-Konfiguration Off lautet, stehen für das zu erfassende HTTP-Modul Ausnahmen zur Verfügung.If the CustomErrors configuration is Off, then exceptions will be available for the HTTP Module to collect. Lautet sie allerdings RemoteOnly (Standardeinstellung) oder On, wird die Ausnahme gelöscht und steht für die automatische Erfassung durch Application Insights nicht zur Verfügung.However, if it is RemoteOnly (default), or On, then the exception will be cleared and not available for Application Insights to automatically collect. Diesen Umstand können Sie beheben, indem Sie die System.Web.Mvc.HandleErrorAttribute-Klasse außer Kraft setzen und die außer Kraft gesetzte Klasse wie unten gezeigt für die verschiedenen MVC-Versionen anwenden (GitHub-Quelle):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

Ersetzen Sie das HandleError-Attribut durch das neue Attribut in Ihren Controllern.Replace the HandleError attribute with your new attribute in your controllers.

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

BeispielSample

MVC 3MVC 3

Registrieren Sie AiHandleErrorAttribute als globalen Filter in "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());
      }
     ...

BeispielSample

MVC 4, MVC5MVC 4, MVC5

Registrieren Sie "AiHandleErrorAttribute" als globalen Filter in "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());
      }
    }

BeispielSample

Web-APIWeb API

Ab Application Insights Web SDK Version 2.6 (beta3 und höher) sammelt Application Insights Ausnahmefehler, die in den Controllermethoden ausgelöst werden, für WebAPI 2+ automatisch.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+. Wenn Sie bereits vorher einen benutzerdefinierten Handler zum Nachverfolgen dieser Ausnahmen hinzugefügt haben (wie in den folgenden Beispielen beschrieben), können Sie ihn entfernen, um eine doppelte Nachverfolgung von Ausnahmen zu verhindern.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.

Es gibt eine Reihe von Fällen, die von den Ausnahmefiltern nicht verarbeitet werden können.There are a number of cases that the exception filters cannot handle. Beispiel:For example:

  • Von Controllerkonstruktoren ausgelöste Ausnahmen.Exceptions thrown from controller constructors.
  • Von Meldungshandlern ausgelöste AusnahmenExceptions thrown from message handlers.
  • Während des Routings ausgelöste Ausnahmen.Exceptions thrown during routing.
  • Während der Serialisierung von Antwortinhalten ausgelöste Ausnahmen.Exceptions thrown during response content serialization.
  • Ausnahme, die während des Anwendungsstarts ausgelöst wird.Exception thrown during application start-up.
  • In Hintergrundaufgaben ausgelöste Ausnahme.Exception thrown in background tasks.

Alle Ausnahmen die von der Anwendung verarbeitet werden, müssen weiterhin manuell nachverfolgt werden.All exceptions handled by application still need to be tracked manually. Ausnahmefehler, die von Controllern ausgehen, führen normalerweise zu folgender Antwort: 500 „Interner Serverfehler“.Unhandled exceptions originating from controllers typically result in 500 "Internal Server Error" response. Wenn eine Antwort dieser Art aufgrund einer behandelten Ausnahme (oder keiner Ausnahme) manuell erstellt wird, wird sie in einer dazugehörigen Anforderungstelemetrie mit „ResultCode 500“ nachverfolgt. Mit dem Application Insights SDK kann die entsprechende Ausnahme aber nicht nachverfolgt werden.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.

Unterstützung von früheren VersionenPrior versions support

Wenn Sie WebAPI 1 (und früher) des Application Insights Web SDK 2.5 (und früher) verwenden, sind die folgenden Beispiele zum Nachverfolgen von Ausnahmen hilfreich.If you use WebAPI 1 (and prior) of Application Insights Web SDK 2.5 (and prior), refer to the following examples to track exceptions.

Web-API 1.xWeb API 1.x

Setzen Sie "System.Web.Http.Filters.ExceptionFilterAttribute" außer Kraft: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);
        }
      }
    }

Sie könnten dieses außer Kraft gesetzte Attribut bestimmten Controllern oder der globalen Filterkonfiguration in der WebApiConfig-Klasse hinzufügen: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());
        }
      }
    }

BeispielSample

Web-API 2.xWeb API 2.x

Fügen Sie eine Implementierung von IExceptionLogger hinzu: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);
        }
      }
    }

Fügen Sie den Diensten in WebApiConfig Folgendes hinzu: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());
        }
      }
     }

BeispielSample

Als Alternativen können Sie folgende Aktionen ausführen:As alternatives, you could:

  1. Ersetzen Sie den einzigen ExceptionHandler durch eine benutzerdefinierte Implementierung von IExceptionHandler.Replace the only ExceptionHandler with a custom implementation of IExceptionHandler. Diese wird nur aufgerufen, wenn das Framework weiterhin wählen kann, welche Antwortnachricht gesendet wird (nicht wenn z. B. die Verbindung abgebrochen wird).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. Ausnahmefilter (wie im obigen Abschnitt zu Web-API-1.x-Controllern beschrieben) – werden nicht in allen Fällen aufgerufen.Exception Filters (as described in the section on Web API 1.x controllers above) - not called in all cases.

WCFWCF

Fügen Sie eine Klasse hinzu, die "Attribute" erweitert und "IErrorHandler" und "IServiceBehavior" implementiert.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
        {
         ...

BeispielSample

AusnahmeleistungsindikatorenException performance counters

Wenn Sie den Application Insights-Agent auf Ihrem Server installiert haben, können Sie ein Diagramm mit der von .NET gemessenen Ausnahmenrate abrufen.If you have installed the Application Insights Agent on your server, you can get a chart of the exceptions rate, measured by .NET. Dies enthält sowohl behandelte als auch nicht behandelte .NET-Ausnahmen.This includes both handled and unhandled .NET exceptions.

Öffnen Sie eine Metrik-Explorer-Registerkarte, fügen Sie ein neues Diagramm hinzu, und wählen Sie in den Leistungsindikatoren Ausnahmerate aus.Open a Metric Explorer tab, add a new chart, and select Exception rate, listed under Performance Counters.

.NET Framework berechnet die Rate, indem die Anzahl von Ausnahmen innerhalb eines Intervalls gezählt und diese durch die Länge des Intervalls geteilt wird.The .NET framework calculates the rate by counting the number of exceptions in an interval and dividing by the length of the interval.

Dieser Wert unterscheidet sich von der Anzahl der „Ausnahmen“, die vom Application Insights-Portal durch Zählen von TrackException-Meldungen berechnet wird.This is different from the 'Exceptions' count calculated by the Application Insights portal counting TrackException reports. Die Samplingintervalle sind unterschiedlich, und das SDK sendet keine TrackException-Meldungen für alle behandelten und nicht behandelten Ausnahmen.The sampling intervals are different, and the SDK doesn't send TrackException reports for all handled and unhandled exceptions.

Nächste SchritteNext steps