ApplicationInsightsLoggerProvider pour les journaux ILogger .NET CoreApplicationInsightsLoggerProvider for .NET Core ILogger logs

ASP.NET Core prend en charge une API de journalisation qui fonctionne avec différents types de fournisseurs de journalisation intégrés et tiers.ASP.NET Core supports a logging API that works with different kinds of built-in and third-party logging providers. La journalisation est activée en appelant Log() ou une variante de cette méthode sur les instances ILogger.Logging is done by calling Log() or a variant of it on ILogger instances. Cet article explique comment utiliser ApplicationInsightsLoggerProvider pour capturer les journaux ILogger dans les applications console et ASP.NET Core.This article demonstrates how to use ApplicationInsightsLoggerProvider to capture ILogger logs in console and ASP.NET Core applications. Cet article décrit également comment ApplicationInsightsLoggerProvider s’intègre avec d’autres applications de télémétrie Application Insights.This article also describes how ApplicationInsightsLoggerProvider integrates with other Application Insights telemetry. Pour plus d’informations, consultez Journalisation dans ASP.NET Core.To learn more, see Logging in ASP.NET Core.

Applications ASP.NET CoreASP.NET Core applications

ApplicationInsightsLoggerProvider est activé par défaut dans le SDK Microsoft.ApplicationInsights.AspNet version 2.7.0-beta3 (et versions ultérieures) lorsque vous activez la surveillance régulière d’Application Insights par le biais des méthodes standards suivantes :ApplicationInsightsLoggerProvider is enabled by default in Microsoft.ApplicationInsights.AspNet SDK version 2.7.0-beta3 (and later) when you turn on regular Application Insights monitoring through either of the standard methods:

  • En appelant la méthode d’extension UseApplicationInsights sur IWebHostBuilderBy calling the UseApplicationInsights extension method on IWebHostBuilder
  • En appelant la méthode d’extension AddApplicationInsightsTelemetry sur IServiceCollectionBy calling the AddApplicationInsightsTelemetry extension method on IServiceCollection

Les journaux ILogger que ApplicationInsightsLoggerProvider capture sont soumis à la même configuration que les autres données de télémétrie collectées.ILogger logs that ApplicationInsightsLoggerProvider captures are subject to the same configuration as any other telemetry that's collected. Ils possèdent le même ensemble de TelemetryInitializers et de TelemetryProcessors, utilisent le même TelemetryChannel, sont corrélées et échantillonnées de la même façon que les autres données de télémétrie.They have the same set of TelemetryInitializers and TelemetryProcessors, use the same TelemetryChannel, and are correlated and sampled in the same way as other telemetry. Si vous utilisez la version 2.7.0-beta3 ou ultérieure, aucune action n’est nécessaire pour capturer les journaux ILogger.If you use version 2.7.0-beta3 or later, no action is required to capture ILogger logs.

Seuls les journaux ILogger de niveau Warning ou supérieur (de toutes les catégories) sont envoyés à Application Insights par défaut.Only Warning or higher ILogger logs (from all categories) are sent to Application Insights by default. Cependant, vous pouvez appliquer des filtres pour modifier ce comportement.But you can apply filters to modify this behavior. Des étapes supplémentaires sont nécessaires pour capturer les journaux ILogger à partir de Program.cs ou de Startup.cs.Additional steps are required to capture ILogger logs from Program.cs or Startup.cs. (Consultez Capturer les journaux ILogger à partir de Startup.cs et Program.cs dans les applications ASP.NET Core..)(See Capturing ILogger logs from Startup.cs and Program.cs in ASP.NET Core applications.)

Si vous utilisez une version antérieure du SDK Microsoft ApplicationInsights.AspNet ou si vous souhaitez simplement utiliser ApplicationInsightsLoggerProvider sans aucune autre surveillance Application Insights, utilisez la procédure suivante :If you use an earlier version of Microsoft.ApplicationInsights.AspNet SDK or you want to just use ApplicationInsightsLoggerProvider without any other Application Insights monitoring, use the following procedure:

  1. Installez le package NuGet :Install the NuGet package:

        <ItemGroup>
          <PackageReference Include="Microsoft.Extensions.Logging.ApplicationInsights" Version="2.9.1" />  
        </ItemGroup>
    
  2. Modifiez Program.cs comme indiqué ici :Modify Program.cs as shown here:

    using Microsoft.AspNetCore;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.Extensions.Logging;
    
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }
    
        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
          WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
          .ConfigureLogging(
                builder =>
                {
                    // Providing an instrumentation key here is required if you're using
                    // standalone package Microsoft.Extensions.Logging.ApplicationInsights
                    // or if you want to capture logs from early in the application startup
                    // pipeline from Startup.cs or Program.cs itself.
                    builder.AddApplicationInsights("ikey");
    
                    // Optional: Apply filters to control what logs are sent to Application Insights.
                    // The following configures LogLevel Information or above to be sent to
                    // Application Insights for all categories.
                    builder.AddFilter<Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider>
                                     ("", LogLevel.Information);
                }
            );
    }
    

Le code de l’étape 2 configure ApplicationInsightsLoggerProvider.The code in step 2 configures ApplicationInsightsLoggerProvider. Le code suivant est un exemple de classe Controller, qui utilise ILogger pour envoyer les journaux.The following code shows an example Controller class, which uses ILogger to send logs. Les journaux sont capturés par Application Insights.The logs are captured by Application Insights.

public class ValuesController : ControllerBase
{
    private readonly `ILogger` _logger;

    public ValuesController(ILogger<ValuesController> logger)
    {
        _logger = logger;
    }

    // GET api/values
    [HttpGet]
    public ActionResult<IEnumerable<string>> Get()
    {
        // All the following logs will be picked up by Application Insights.
        // and all of them will have ("MyKey", "MyValue") in Properties.
        using (_logger.BeginScope(new Dictionary<string, object> { { "MyKey", "MyValue" } }))
            {
                _logger.LogWarning("An example of a Warning trace..");
                _logger.LogError("An example of an Error level message");
            }
        return new string[] { "value1", "value2" };
    }
}

Capturer les journaux ILogger à partir de Startup.cs et Program.cs dans les applications ASP.NET CoreCapture ILogger logs from Startup.cs and Program.cs in ASP.NET Core apps

Notes

Dans ASP.NET Core 3.0 et versions ultérieures, il n’est plus possible d’injecter ILogger dans Startup.cs et Program.cs.In ASP.NET Core 3.0 and later, it is no longer possible to inject ILogger in Startup.cs and Program.cs. Consultez https://github.com/aspnet/Announcements/issues/353 pour plus d’informations.See https://github.com/aspnet/Announcements/issues/353 for more details.

Le nouveau ApplicationInsightsLoggerProvider peut capturer les journaux dès le début du pipeline de démarrage de l’application.The new ApplicationInsightsLoggerProvider can capture logs from early in the application-startup pipeline. Bien que ApplicationInsightsLoggerProvider soit automatiquement activé dans Application Insights (à partir de la version 2.7.0-beta3), sa clé d’instrumentation n’est configurée qu’à un stade ultérieur du pipeline.Although ApplicationInsightsLoggerProvider is automatically enabled in Application Insights (starting with version 2.7.0-beta3), it doesn't have an instrumentation key set up until later in the pipeline. Ainsi, seuls les journaux de Controller/d’autres classes seront capturés.So, only logs from Controller/other classes will be captured. Pour capturer tous les journaux en commençant par Program.cs et Startup.cs, vous devez explicitement activer une clé d’instrumentation pour ApplicationInsightsLoggerProvider.To capture every log starting with Program.cs and Startup.cs itself, you must explicitly enable an instrumentation key for ApplicationInsightsLoggerProvider. En outre, TelemetryConfiguration n’est pas entièrement défini lorsque vous vous connectez à partir de Program.cs ou de Startup.cs lui-même.Also, TelemetryConfiguration is not fully set up when you log from Program.cs or Startup.cs itself. Ces journaux auront donc une configuration minimale qui utilise InMemoryChannel, aucun échantillonnage et aucun initialisateur ou processeur de télémétrie standard.So those logs will have a minimum configuration that uses InMemoryChannel, no sampling, and no standard telemetry initializers or processors.

Les exemples suivants illustrent cette fonctionnalité avec Program.cs et Startup.cs.The following examples demonstrate this capability with Program.cs and Startup.cs.

Exemple avec Program.csExample Program.cs

using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Logging;

public class Program
{
    public static void Main(string[] args)
    {
        var host = CreateWebHostBuilder(args).Build();
        var logger = host.Services.GetRequiredService<ILogger<Program>>();
        // This will be picked up by AI
        logger.LogInformation("From Program. Running the host now..");
        host.Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>()
        .ConfigureLogging(
        builder =>
            {
            // Providing an instrumentation key here is required if you're using
            // standalone package Microsoft.Extensions.Logging.ApplicationInsights
            // or if you want to capture logs from early in the application startup 
            // pipeline from Startup.cs or Program.cs itself.
            builder.AddApplicationInsights("ikey");

            // Adding the filter below to ensure logs of all severity from Program.cs
            // is sent to ApplicationInsights.
            builder.AddFilter<Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider>
                             (typeof(Program).FullName, LogLevel.Trace);

            // Adding the filter below to ensure logs of all severity from Startup.cs
            // is sent to ApplicationInsights.
            builder.AddFilter<Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider>
                             (typeof(Startup).FullName, LogLevel.Trace);
            }
        );
}

Exemple avec Startup.csExample Startup.cs

public class Startup
{
    private readonly `ILogger` _logger;

    public Startup(IConfiguration configuration, ILogger<Startup> logger)
    {
        Configuration = configuration;
        _logger = logger;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddApplicationInsightsTelemetry();

        // The following will be picked up by Application Insights.
        _logger.LogInformation("Logging from ConfigureServices.");
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            // The following will be picked up by Application Insights.
            _logger.LogInformation("Configuring for Development environment");
            app.UseDeveloperExceptionPage();
        }
        else
        {
            // The following will be picked up by Application Insights.
            _logger.LogInformation("Configuring for Production environment");
        }

        app.UseMvc();
    }
}

Migrer à partir de l’ancienne version de ApplicationInsightsLoggerProviderMigrate from the old ApplicationInsightsLoggerProvider

Les versions du SDK Microsoft.ApplicationInsights.AspNet antérieures à la version 2.7.0-beta2 prenait en charge un fournisseur de journalisation qui est désormais obsolète.Microsoft.ApplicationInsights.AspNet SDK versions before 2.7.0-beta2 supported a logging provider that's now obsolete. Ce fournisseur a été activé via la méthode d’extension AddApplicationInsights() de ILoggerFactory.This provider was enabled through the AddApplicationInsights() extension method of ILoggerFactory. Nous vous recommandons de migrer vers le nouveau fournisseur, ce qui implique deux opérations :We recommend that you migrate to the new provider, which involves two steps:

  1. Supprimez l’appel ILoggerFactory.AddApplicationInsights() de la méthode Startup.Configure() pour éviter une journalisation en double.Remove the ILoggerFactory.AddApplicationInsights() call from the Startup.Configure() method to avoid double logging.
  2. Réappliquez les règles de filtrage dans le code, car elles ne seront pas suivies par le nouveau fournisseur.Reapply any filtering rules in code, because they will not be respected by the new provider. Les surcharges de ILoggerFactory.AddApplicationInsights() ont nécessité un minimum de fonctions LogLevel ou de filtrage.Overloads of ILoggerFactory.AddApplicationInsights() took minimum LogLevel or filter functions. Avec le nouveau fournisseur, le filtrage fait partie de l’infrastructure de journalisation lui-même.With the new provider, filtering is part of the logging framework itself. Ce n’est pas le fournisseur Application Insights qui s’en charge.It's not done by the Application Insights provider. Ainsi tous les filtres qui sont fournis via les surcharges de ILoggerFactory.AddApplicationInsights() doivent être supprimés.So any filters that are provided via ILoggerFactory.AddApplicationInsights() overloads should be removed. De plus, il est souhaitable de définir des règles de filtrage conformément aux instructions de la section Contrôler le niveau de journalisation.And filtering rules should be provided by following the Control logging level instructions. Si vous utilisez appsettings.json pour filtrer la journalisation, il continuera à fonctionner avec le nouveau fournisseur, car les deux utilisent le même alias, ApplicationInsights.If you use appsettings.json to filter logging, it will continue to work with the new provider, because both use the same provider alias, ApplicationInsights.

Vous pouvez toujours utiliser l’ancien fournisseur.You can still use the old provider. (Il ne sera supprimé que lors d’un changement de version principale vers la version 3.xxxx.) Cependant, nous vous recommandons de migrer vers le nouveau fournisseur pour les raisons suivantes :(It will be removed only in a major version change to 3.xx.) But we recommend that you migrate to the new provider for the following reasons:

  • Le fournisseur précédent ne prend pas en charge les étendues de journal.The previous provider lacks support for log scopes. Dans le nouveau fournisseur, les propriétés d’étendue sont automatiquement ajoutées en tant que propriétés personnalisées aux données de télémétrie collectées.In the new provider, properties from scope are automatically added as custom properties to the collected telemetry.
  • Les journaux peuvent désormais être capturés beaucoup plus tôt dans le pipeline de démarrage de l’application.Logs can now be captured much earlier in the application startup pipeline. Les journaux des classes Program et Startup peuvent maintenant être capturés.Logs from the Program and Startup classes can now be captured.
  • Avec le nouveau fournisseur, le filtrage se fait au niveau de l’infrastructure elle-même.With the new provider, filtering is done at the framework level itself. Vous pouvez filtrer les journaux vers le fournisseur Application Insights de la même manière que pour les autres fournisseurs, y compris les fournisseurs intégrés comme Console, Debug, etc.You can filter logs to the Application Insights provider in the same way as for other providers, including built-in providers like Console, Debug, and so on. Vous pouvez également appliquer les mêmes filtres à plusieurs fournisseurs.You can also apply the same filters to multiple providers.
  • Dans ASP.NET Core (2.0 et versions ultérieures), le moyen recommandé pour activer les fournisseurs de journalisation est d’utiliser des méthodes d’extension sur ILoggingBuilder dans Program.cs lui-même.In ASP.NET Core (2.0 and later), the recommended way to enable logging providers is by using extension methods on ILoggingBuilder in Program.cs itself.

Notes

Le nouveau fournisseur est disponible pour les applications ciblant NETSTANDARD2.0 ou une version ultérieure.The new provider is available for applications that target NETSTANDARD2.0 or later. Si votre application cible les anciennes versions de .NET Core, telles que .NET Core 1.1, ou si elle cible .NET Framework, continuez à utiliser l’ancien fournisseur.If your application targets older .NET Core versions, such as .NET Core 1.1, or if it targets the .NET Framework, continue to use the old provider.

Application de consoleConsole application

Voici un exemple de code d’application console configuré pour envoyer des traces ILogger à Application Insights.The following code shows a sample console application that's configured to send ILogger traces to Application Insights.

Packages installés :Packages installed:

<ItemGroup>
  <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="2.1.0" />  
  <PackageReference Include="Microsoft.Extensions.Logging.ApplicationInsights" Version="2.9.1" />
  <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="2.1.0" />
</ItemGroup>
class Program
{
    static void Main(string[] args)
    {
        // Create the DI container.
        IServiceCollection services = new ServiceCollection();

        // Channel is explicitly configured to do flush on it later.
        var channel = new InMemoryChannel();
        services.Configure<TelemetryConfiguration>(
            (config) =>
            {
                config.TelemetryChannel = channel;
            }
        );

        // Add the logging pipelines to use. We are using Application Insights only here.
        services.AddLogging(builder =>
        {
            // Optional: Apply filters to configure LogLevel Trace or above is sent to
            // Application Insights for all categories.
            builder.AddFilter<Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider>
                             ("", LogLevel.Trace);
            builder.AddApplicationInsights("--YourAIKeyHere--");
        });

        // Build ServiceProvider.
        IServiceProvider serviceProvider = services.BuildServiceProvider();

        ILogger<Program> logger = serviceProvider.GetRequiredService<ILogger<Program>>();

        // Begin a new scope. This is optional.
        using (logger.BeginScope(new Dictionary<string, object> { { "Method", nameof(Main) } }))
        {
            logger.LogInformation("Logger is working"); // this will be captured by Application Insights.
        }

        // Explicitly call Flush() followed by sleep is required in Console Apps.
        // This is to ensure that even if application terminates, telemetry is sent to the back-end.
        channel.Flush();
        Thread.Sleep(1000);
    }
}

Cet exemple utilise le package autonome Microsoft.Extensions.Logging.ApplicationInsights.This example uses the standalone package Microsoft.Extensions.Logging.ApplicationInsights. Par défaut, cette configuration utilise le strict minimum, TelemetryConfiguration, pour envoyer des données à Application Insights.By default, this configuration uses the "bare minimum" TelemetryConfiguration for sending data to Application Insights. Le strict minimum signifie que le canal utilisé est InMemoryChannel.Bare minimum means that InMemoryChannel is the channel that's used. Aucun échantillonnage n’est effectué et aucun TelemetryInitializers standard n’est utilisé.There's no sampling and no standard TelemetryInitializers. Ce comportement peut être substitué pour une application console comme indiqué dans l’exemple suivant.This behavior can be overridden for a console application, as the following example shows.

Installez ce package supplémentaire :Install this additional package:

<PackageReference Include="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel" Version="2.9.1" />

La section suivante montre comment substituer la valeur par défaut TelemetryConfiguration à l’aide de la méthode services.Configure<TelemetryConfiguration>() .The following section shows how to override the default TelemetryConfiguration by using the services.Configure<TelemetryConfiguration>() method. Cet exemple montre comment configurer ServerTelemetryChannel et l’échantillonnage.This example sets up ServerTelemetryChannel and sampling. Il ajoute un ITelemetryInitializer personnalisé à TelemetryConfiguration.It adds a custom ITelemetryInitializer to the TelemetryConfiguration.

    // Create the DI container.
    IServiceCollection services = new ServiceCollection();
    var serverChannel = new ServerTelemetryChannel();
    services.Configure<TelemetryConfiguration>(
        (config) =>
        {
            config.TelemetryChannel = serverChannel;
            config.TelemetryInitializers.Add(new MyTelemetryInitalizer());
            config.DefaultTelemetrySink.TelemetryProcessorChainBuilder.UseSampling(5);
            serverChannel.Initialize(config);
        }
    );

    // Add the logging pipelines to use. We are adding Application Insights only.
    services.AddLogging(loggingBuilder =>
    {
        loggingBuilder.AddApplicationInsights();
    });

    ........
    ........

    // Explicitly calling Flush() followed by sleep is required in Console Apps.
    // This is to ensure that even if the application terminates, telemetry is sent to the back end.
    serverChannel.Flush();
    Thread.Sleep(1000);

Contrôler le niveau de journalisationControl logging level

L’infrastructure ILogger ASP.NET Core dispose d’un mécanisme intégré pour appliquer le filtrage des journaux.The ASP.NET Core ILogger infra has a built-in mechanism to apply log filtering. Cela vous permet de contrôler les journaux qui sont envoyés à chaque fournisseur inscrit, y compris le fournisseur Application Insights.This lets you control the logs that are sent to each registered provider, including the Application Insights provider. Le filtrage peut s’effectuer soit dans la configuration (généralement en utilisant un fichier appsettings.json), soit dans le code.The filtering can be done either in configuration (typically by using an appsettings.json file) or in code. Cette fonctionnalité est fournie par le framework lui-même.This facility is provided by the framework itself. Elle n’est pas spécifique au fournisseur Application Insights.It's not specific to the Application Insights provider.

Les exemples suivants appliquent les règles de filtrage à ApplicationInsightsLoggerProvider.The following examples apply filter rules to ApplicationInsightsLoggerProvider.

Créer des règles de filtrage dans la configuration avec appsettings.jsonCreate filter rules in configuration with appsettings.json

Pour ApplicationInsightsLoggerProvider, l’alias du fournisseur est ApplicationInsights.For ApplicationInsightsLoggerProvider, the provider alias is ApplicationInsights. La section suivante du fichier appsettings.json configure le niveau Avertissement et les niveaux supérieurs de toutes les catégories dans les journaux, et le niveau Erreur et les niveaux supérieurs des catégories qui commencent par « Microsoft » à envoyer à ApplicationInsightsLoggerProvider.The following section of appsettings.json configures logs for Warning and above from all categories and Error and above from categories that start with "Microsoft" to be sent to ApplicationInsightsLoggerProvider.

{
  "Logging": {
    "ApplicationInsights": {
      "LogLevel": {
        "Default": "Warning",
        "Microsoft": "Error"
      }
    },
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"
}

Créer des règles de filtre dans le codeCreate filter rules in code

L’extrait de code suivant configure le niveau Avertissement et les niveaux supérieurs de toutes les catégories dans les journaux, et le niveau Erreur et les niveaux supérieurs des catégories qui commencent par « Microsoft » à envoyer à ApplicationInsightsLoggerProvider.The following code snippet configures logs for Warning and above from all categories and for Error and above from categories that start with "Microsoft" to be sent to ApplicationInsightsLoggerProvider. Cette configuration est la même que dans la section précédente du fichier appsettings.json.This configuration is the same as in the previous section in appsettings.json.

    WebHost.CreateDefaultBuilder(args)
    .UseStartup<Startup>()
    .ConfigureLogging(logging =>
      logging.AddFilter<Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider>
                        ("", LogLevel.Warning)
             .AddFilter<Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider>
                        ("Microsoft", LogLevel.Error);

Questions fréquentes (FAQ)Frequently asked questions

Quelles sont les versions anciennes et nouvelles de ApplicationInsightsLoggerProvider ?What are the old and new versions of ApplicationInsightsLoggerProvider?

Le SDK Microsoft.ApplicationInsights.AspNet inclut un fournisseur ApplicationInsightsLoggerProvider intégré (Microsoft.ApplicationInsights.AspNetCore.Logging.Logging.ApplicationInsightsLoggerProvider), qui était activé par les méthodes d’extension ILoggerFactory.Microsoft.ApplicationInsights.AspNet SDK included a built-in ApplicationInsightsLoggerProvider (Microsoft.ApplicationInsights.AspNetCore.Logging.ApplicationInsightsLoggerProvider), which was enabled through ILoggerFactory extension methods. Ce fournisseur est marqué obsolète à partir de la version 2.7.0-beta2.This provider is marked obsolete from version 2.7.0-beta2. Il sera complètement supprimé lors de la prochaine mise à jour majeure de version.It will be removed completely in the next major version change. Le package Microsoft.ApplicationInsights.AspNetCore 2.6.1 lui-même n’est pas obsolète.The Microsoft.ApplicationInsights.AspNetCore 2.6.1 package itself isn't obsolete. Il est nécessaire pour permettre la surveillance des requêtes, des dépendances, etc.It's required to enable monitoring of requests, dependencies, and so on.

Il est également possible de préférer le nouveau package autonome Microsoft.Extensions.Logging.ApplicationInsights, qui contient un fournisseur ApplicationInsightsLoggerProvider amélioré (Microsoft.Extensions.Logging.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider) et des méthodes d’extension sur ILoggerBuilder pour son activation.The suggested alternative is the new standalone package Microsoft.Extensions.Logging.ApplicationInsights, which contains an improved ApplicationInsightsLoggerProvider (Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider) and extension methods on ILoggerBuilder for enabling it.

Le SDK Microsoft.ApplicationInsights.AspNet version 2.7.0-beta3 établit une dépendance avec le nouveau package et active automatiquement la fonctionnalité de capture ILogger.Microsoft.ApplicationInsights.AspNet SDK version 2.7.0-beta3 takes a dependency on the new package and enables ILogger capture automatically.

Pourquoi certains journaux ILogger figurent-ils deux fois dans Application Insights ?Why are some ILogger logs shown twice in Application Insights?

Si l’ancienne version (maintenant obsolète) de ApplicationInsightsLoggerProvider est activée dans votre environnement, la duplication est possible en appelant AddApplicationInsights sur ILoggerFactory.Duplication can occur if you have the older (now obsolete) version of ApplicationInsightsLoggerProvider enabled by calling AddApplicationInsights on ILoggerFactory. Vérifiez si votre méthode Configure possède les éléments suivants et supprimez-la :Check if your Configure method has the following, and remove it:

 public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
 {
     loggerFactory.AddApplicationInsights(app.ApplicationServices, LogLevel.Warning);
     // ..other code.
 }

Si vous rencontrez une double journalisation lorsque vous déboguez depuis Visual Studio, définissez EnableDebugLogger sur false dans le code qui active Application Insights, comme suit.If you experience double logging when you debug from Visual Studio, set EnableDebugLogger to false in the code that enables Application Insights, as follows. Cette duplication et ce correctif ne sont pertinents que lorsque vous déboguez l’application.This duplication and fix is only relevant when you're debugging the application.

 public void ConfigureServices(IServiceCollection services)
 {
     ApplicationInsightsServiceOptions options = new ApplicationInsightsServiceOptions();
     options.EnableDebugLogger = false;
     services.AddApplicationInsightsTelemetry(options);
     // ..other code.
 }

J’ai effectué la mise à jour vers le SDK Microsoft.ApplicationInsights.AspNet version 2.7.0-beta3, et les journaux d’activité de ILogger sont capturés automatiquement.I updated to Microsoft.ApplicationInsights.AspNet SDK version 2.7.0-beta3, and logs from ILogger are captured automatically. Comment désactiver complètement cette fonctionnalité ?How do I turn off this feature completely?

Consultez la section Contrôler le niveau de journalisation pour découvrir comment filtrer les journaux en général.See the Control logging level section to see how to filter logs in general. Pour désactiver ApplicationInsightsLoggerProvider, utilisez LogLevel.None :To turn-off ApplicationInsightsLoggerProvider, use LogLevel.None:

Dans le code :In code:

    builder.AddFilter<Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider>
                      ("", LogLevel.None);

Dans la configuration :In config:

{
  "Logging": {
    "ApplicationInsights": {
      "LogLevel": {
        "Default": "None"
      }
}

Pourquoi certains journaux ILogger n’ont-ils pas les mêmes propriétés que d’autres ?Why do some ILogger logs not have the same properties as others?

Application Insights capture et envoie les journaux ILogger à l’aide de la même TelemetryConfiguration qui est utilisée pour toutes les autres données de télémétrie.Application Insights captures and sends ILogger logs by using the same TelemetryConfiguration that's used for every other telemetry. Il existe cependant une exception.But there's an exception. Par défaut, TelemetryConfiguration n’est pas entièrement configuré lorsque vous vous connectez à partir de Program.cs ou de Startup.cs.By default, TelemetryConfiguration is not fully set up when you log from Program.cs or Startup.cs. Les journaux figurant à ces emplacements ne sont pas soumis à la configuration par défaut et n’exécuteront donc pas tous TelemetryInitializers et TelemetryProcessors.Logs from these places won't have the default configuration, so they won't be running all TelemetryInitializers and TelemetryProcessors.

J’utilise le package autonome Microsoft.Extensions.Logging.Logging.ApplicationInsights, et je veux enregistrer manuellement certaines télémesures personnalisées supplémentaires.I'm using the standalone package Microsoft.Extensions.Logging.ApplicationInsights, and I want to log some additional custom telemetry manually. Comment dois-je procéder ?How should I do that?

Lorsque vous utilisez le package autonome, TelemetryClient n’est pas injecté dans le conteneur DI, vous devez donc créer une nouvelle instance de TelemetryClient et utiliser la même configuration que celle du fournisseur d’enregistreur, comme le montre le code suivant.When you use the standalone package, TelemetryClient is not injected to the DI container, so you need to create a new instance of TelemetryClient and use the same configuration as the logger provider uses, as the following code shows. Cela garantit que la même configuration est utilisée pour toutes les données de télémétrie personnalisées ainsi que pour les données de télémétrie de la fonctionnalité ILogger.This ensures that the same configuration is used for all custom telemetry as well as telemetry from ILogger.

public class MyController : ApiController
{
   // This telemtryclient can be used to track additional telemetry using TrackXXX() api.
   private readonly TelemetryClient _telemetryClient;
   private readonly ILogger _logger;

   public MyController(IOptions<TelemetryConfiguration> options, ILogger<MyController> logger)
   {
        _telemetryClient = new TelemetryClient(options.Value);
        _logger = logger;
   }  
}

Notes

Si vous utilisez le package Microsoft.ApplicationInsights.AspNetCore pour activer Application Insights, modifiez ce code pour obtenir TelemetryClient directement dans le constructeur.If you use the Microsoft.ApplicationInsights.AspNetCore package to enable Application Insights, modify this code to get TelemetryClient directly in the constructor. Pour obtenir un exemple, consultez ce forum aux questions.For an example, see this FAQ.

Quel type de télémétrie Application Insights est produit à partir des journaux d’activité ILogger ?What Application Insights telemetry type is produced from ILogger logs? Où les journaux d’activité ILogger figurent-ils dans Application Insights ?Or where can I see ILogger logs in Application Insights?

ApplicationInsightsLoggerProvider capture les journaux ILogger et crée TraceTelemetry à partir de ceux-ci.ApplicationInsightsLoggerProvider captures ILogger logs and creates TraceTelemetry from them. Si un objet Exception est transmis à la méthode Log() sur ILogger, ExceptionTelemetry est créé à la place de TraceTelemetry.If an Exception object is passed to the Log() method on ILogger, ExceptionTelemetry is created instead of TraceTelemetry. Ces éléments de télémétrie figurent aux mêmes emplacements que n’importe quel autre élément TraceTelemetry ou ExceptionTelemetry pour Application Insights, y compris le portail, les analyses ou le débogueur local Visual Studio.These telemetry items can be found in same places as any other TraceTelemetry or ExceptionTelemetry for Application Insights, including portal, analytics, or Visual Studio local debugger.

Si vous préférez envoyer TraceTelemetry systématiquement, utilisez cet extrait de code : builder.AddApplicationInsights((opt) => opt.TrackExceptionsAsExceptionTelemetry = false);If you prefer to always send TraceTelemetry, use this snippet: builder.AddApplicationInsights((opt) => opt.TrackExceptionsAsExceptionTelemetry = false);

Le SDK n’est pas installé mais j’utilise l’extension Azure Web Apps pour activer Application Insights pour mes applications ASP.NET Core.I don't have the SDK installed, and I use the Azure Web Apps extension to enable Application Insights for my ASP.NET Core applications. Comment utiliser Personalizer ?How do I use the new provider?

L’extension Application Insights d’Azure Web Apps utilise l’ancien fournisseur.The Application Insights extension in Azure Web Apps uses the old provider. Vous pouvez modifier les règles de filtrage dans le fichier appsettings.json de votre application.You can modify the filtering rules in the appsettings.json file for your application. Pour tirer parti du nouveau fournisseur, utilisez l’instrumentation au moment de la génération en établissant une dépendance NuGet sur le SDK.To take advantage of the new provider, use build-time instrumentation by taking a NuGet dependency on the SDK. Cet article sera mis à jour lorsque l’extension utilisera le nouveau fournisseur.This article will be updated when the extension switches to use the new provider.

J’utilise le package autonome Microsoft.Extensions.Logging.Logging.ApplicationInsights, et j’active le fournisseur Application Insights en appelant builder.AddApplicationInsights("ikey") .I'm using the standalone package Microsoft.Extensions.Logging.ApplicationInsights and enabling Application Insights provider by calling builder.AddApplicationInsights("ikey"). Est-il possible d’obtenir une clé d’instrumentation à partir de la configuration ?Is there an option to get an instrumentation key from configuration?

Modifiez Program.cs et appsettings.json comme suit :Modify Program.cs and appsettings.json as follows:

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .ConfigureLogging((hostingContext, logging) =>
            {
                // hostingContext.HostingEnvironment can be used to determine environments as well.
                var appInsightKey = hostingContext.Configuration["myikeyfromconfig"];
                logging.AddApplicationInsights(appInsightKey);
            });
}

Section appropriée de appsettings.json :Relevant section from appsettings.json:

{
  "myikeyfromconfig": "putrealikeyhere"
}

ce code n’est requis que lorsque vous utilisez un fournisseur de journalisation autonome.This code is required only when you use a standalone logging provider. Pour la surveillance régulière d’Application Insights, la clé d’instrumentation est chargée automatiquement à partir du chemin de configuration ApplicationInsights: Instrumentationkey.For regular Application Insights monitoring, the instrumentation key is loaded automatically from the configuration path ApplicationInsights: Instrumentationkey. Appsettings.json doit ressembler à ceci :Appsettings.json should look like this:

{
  "ApplicationInsights":
    {
        "Instrumentationkey":"putrealikeyhere"
    }
}

Étapes suivantesNext steps

Pour en savoir plus :Learn more about: