ApplicationInsightsLoggerProvider pour les journaux de .NET Core ILoggerApplicationInsightsLoggerProvider 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 effectuée en appelant Log() ou une variante de celui-ci sur ILogger instances.Logging is done by calling Log() or a variant of it on ILogger instances. Cet article montre 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 données 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 Microsoft.ApplicationInsights.AspNet SDK version 2.7.0-beta3 (et versions ultérieures) lorsque vous activez un contrôle régulier Application Insights par le biais de la norme méthodes :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 le UseApplicationInsights méthode d’extension sur IWebHostBuilderBy calling the UseApplicationInsights extension method on IWebHostBuilder
  • En appelant le AddApplicationInsightsTelemetry méthode d’extension sur IServiceCollectionBy calling the AddApplicationInsightsTelemetry extension method on IServiceCollection

Les journaux ILogger qui capture ApplicationInsightsLoggerProvider 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 ont le même ensemble de TelemetryInitializers et de TelemetryProcessors, utilisent le même TelemetryChannel, sont corrélées et échantillonnées dans la même façon que d’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 2.7.0-beta3 de version ou une version 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.

Uniquement avertissement ou les journaux ILogger plus élevées (à partir de toutes les catégories) sont envoyées à Application Insights par défaut.Only Warning or higher ILogger logs (from all categories) are sent to Application Insights by default. Toutefois, vous pouvez appliquer des filtres pour modifier ce comportement.But you can apply filters to modify this behavior. Étapes supplémentaires sont nécessaires pour capturer les journaux ILogger à partir de Program.cs ou Startup.cs.Additional steps are required to capture ILogger logs from Program.cs or Startup.cs. (Consultez ILogger capture des journaux à 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 Kit de développement logiciel Microsoft.ApplicationInsights.AspNet ou vous souhaitez simplement utiliser ApplicationInsightsLoggerProvider sans aucune autre Application Insights fonctionnalité d’analyse, procédez comme suit :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. Modifier 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 à l’étape 2 configure ApplicationInsightsLoggerProvider.The code in step 2 configures ApplicationInsightsLoggerProvider. Le code suivant montre un exemple de classe de contrôleur qui utilise ILogger pour envoyer des 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

La nouvelle ApplicationInsightsLoggerProvider pouvez capturer des journaux à partir de tôt dans le pipeline de démarrage de l’application.The new ApplicationInsightsLoggerProvider can capture logs from early in the application-startup pipeline. Bien que ApplicationInsightsLoggerProvider est automatiquement activée dans Application Insights (en commençant par la version 2.7.0-beta3), il n’a pas une clé d’instrumentation définie tant ultérieurement dans le 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. Par conséquent, les journaux depuis contrôleur/ autres classes sont capturées.So, only logs from Controller/other classes will be captured. Pour chaque journal, en commençant par capture Program.cs et Startup.cs lui-même, vous devez activer explicitement 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 Startup.cs lui-même.Also, TelemetryConfiguration is not fully set up when you log from Program.cs or Startup.cs itself. Par conséquent, ces journaux aura une configuration minimale qui n’utilise InMemoryChannel, aucun échantillonnage et aucune des initialiseurs de télémétrie standard ou les processeurs.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 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 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’ancien ApplicationInsightsLoggerProviderMigrate from the old ApplicationInsightsLoggerProvider

Versions de kit de développement logiciel Microsoft.ApplicationInsights.AspNet avant 2.7.0-beta2 pris en charge un fournisseur de journalisation est maintenant 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é par le biais du AddApplicationInsights() méthode d’extension 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 étapes :We recommend that you migrate to the new provider, which involves two steps:

  1. Supprimer le ILoggerFactory.AddApplicationInsights() appeler à partir de la Startup.Configure() méthode afin d’éviter de journalisation double.Remove the ILoggerFactory.AddApplicationInsights() call from the Startup.Configure() method to avoid double logging.
  2. Réappliquer les règles de filtrage dans le code, car ils ne sont pas respectées 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() a duré minimale fonctions LogLevel ou filtre.Overloads of ILoggerFactory.AddApplicationInsights() took minimum LogLevel or filter functions. Avec le nouveau fournisseur, le filtrage fait partie de l’infrastructure de journalisation proprement dit.With the new provider, filtering is part of the logging framework itself. Il n’est pas effectuée par le fournisseur d’Application Insights.It's not done by the Application Insights provider. Par conséquent, tous les filtres qui sont fournies via ILoggerFactory.AddApplicationInsights() surcharges doivent être supprimés.So any filters that are provided via ILoggerFactory.AddApplicationInsights() overloads should be removed. Et les règles de filtrage doivent être fournie en suivant le contrôler le niveau de journalisation obtenir des instructions.And filtering rules should be provided by following the Control logging level instructions. Si vous utilisez appsettings.json pour filtrer la journalisation, il continue de fonctionner avec le nouveau fournisseur, étant donné que les deux utilisent le même alias de fournisseur, 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. (Elle sera supprimée uniquement dans un changement de version principale à 3. xx.) Mais 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 dispose pas de prise en charge de connecter étendues.The previous provider lacks support for log scopes. Dans le nouveau fournisseur, les propriétés de portée sont automatiquement ajoutées en tant que propriétés personnalisées pour les 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.
  • Journaux peuvent maintenant être capturés beaucoup plus tôt dans le pipeline de démarrage d’application.Logs can now be captured much earlier in the application startup pipeline. Se connecte à partir de la programme et démarrage classes peuvent maintenant être capturés.Logs from the Program and Startup classes can now be captured.
  • Avec le nouveau fournisseur, le filtrage est effectué au niveau du framework lui-même.With the new provider, filtering is done at the framework level itself. Vous pouvez filtrer les journaux pour le fournisseur d’Application Insights dans la même manière que pour d’autres fournisseurs, notamment les fournisseurs intégrés, tels que de la Console, débogage et ainsi de suite.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), la méthode recommandée pour activer les fournisseurs de journalisation est à l’aide de 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 qui ciblent NETSTANDARD2.0 ou version ultérieure.The new provider is available for applications that target NETSTANDARD2.0 or later. Si votre application cible des versions antérieures de .NET Core, telles que .NET Core 1.1, ou si elle cible le .NET Framework, continuer à 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

Le code suivant montre un exemple d’application console qui est configuré pour envoyer des traces de 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 « minimum » TelemetryConfiguration pour envoyer des données à Application Insights.By default, this configuration uses the "bare minimum" TelemetryConfiguration for sending data to Application Insights. Strict minimum signifie que InMemoryChannel est le canal est utilisé.Bare minimum means that InMemoryChannel is the channel that's used. Il n’existe aucune TelemetryInitializers d’échantillonnage et non standard.There's no sampling and no standard TelemetryInitializers. Ce comportement peut être substitué pour une application de console, comme le montre 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 remplacer la valeur par défaut TelemetryConfiguration en utilisant le services. Configurer() (méthode).The following section shows how to override the default TelemetryConfiguration by using the services.Configure() method. Cet exemple configure ServerTelemetryChannel et d’échantillonnage.This example sets up ServerTelemetryChannel and sampling. Il ajoute un ITelemetryInitializer personnalisé à la 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);

Niveau de journalisation de contrôleControl logging level

ASP.NET Core ILogger infra a un mécanisme intégré pour appliquer filtrage de journal.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 d’Application Insights.This lets you control the logs that are sent to each registered provider, including the Application Insights provider. Le filtrage peut être effectué dans la configuration (généralement en utilisant un appsettings.json fichier) ou 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. Il n’est pas spécifique au fournisseur d’Application Insights.It's not specific to the Application Insights provider.

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

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

Pour ApplicationInsightsLoggerProvider, l’alias de fournisseur est ApplicationInsights.For ApplicationInsightsLoggerProvider, the provider alias is ApplicationInsights. La section suivante de appsettings.json configure les journaux pour avertissement et versions ultérieures de toutes les catégories et erreur et versions ultérieures à partir 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 les journaux pour avertissement et versions ultérieures de toutes les catégories et pour erreur et versions ultérieures à partir 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 le même que dans la section précédente dans 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?

Kit de développement logiciel Microsoft.ApplicationInsights.AspNet inclus un ApplicationInsightsLoggerProvider intégré (Microsoft.ApplicationInsights.AspNetCore.Logging.ApplicationInsightsLoggerProvider), qui a été activée par le biais ILoggerFactory méthodes d’extension.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é comme 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ée dans la prochaine modification de version principale.It will be removed completely in the next major version change. Le Microsoft.ApplicationInsights.AspNetCore 2.6.1 package lui-même n’est pas obsolète.The Microsoft.ApplicationInsights.AspNetCore 2.6.1 package itself isn't obsolete. Il est obligatoire pour activer la surveillance des demandes, dépendances et ainsi de suite.It's required to enable monitoring of requests, dependencies, and so on.

L’alternative suggérée est le nouveau package autonome Microsoft.Extensions.Logging.ApplicationInsights, qui contient une (ApplicationInsightsLoggerProvider améliorée Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider) et les méthodes d’extension sur ILoggerBuilder pour l’activer.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.

Kit de développement logiciel Microsoft.ApplicationInsights.AspNet version 2.7.0-beta3 prennent une dépendance sur le nouveau package et permet la capture de ILogger automatiquement.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 deux fois dans Application Insights ?Why are some ILogger logs shown twice in Application Insights?

Duplication peut se produire si vous avez l’ancienne version (obsolète) de ApplicationInsightsLoggerProvider activé 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 configurer méthode suivantes et le supprimer :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 double journalisation lorsque vous déboguez à partir de Visual Studio, définissez EnableDebugLogger à false dans le code qui permet à 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 le correctif est pertinente uniquement 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 mis à jour vers Microsoft.ApplicationInsights.AspNet SDK version 2.7.0-beta3 et journaux à partir de ILogger sont automatiquement capturés.I updated to Microsoft.ApplicationInsights.AspNet SDK version 2.7.0-beta3, and logs from ILogger are captured automatically. Comment activer cette fonctionnalité complètement ?How do I turn off this feature completely?

Consultez le contrôler le niveau de journalisation section pour apprendre à 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 inutile 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. Mais il existe une exception.But there's an exception. Par défaut, TelemetryConfiguration n'est pas entièrement configurée lorsque vous vous connectez à partir de Program.cs ou Startup.cs.By default, TelemetryConfiguration is not fully set up when you log from Program.cs or Startup.cs. Les journaux à partir de ces emplacements n’auront pas la configuration par défaut, afin qu’ils ne sont pas être en cours d’exécution 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.ApplicationInsights, et je souhaite ouvrir une session manuellement des données de télémétrie 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és dans le conteneur d’injection de dépendance, donc vous devez créer une nouvelle instance de TelemetryClient et utilisent la même configuration de l’enregistreur d’événements fournisseur qui utilise, 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 les données de télémétrie de 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, modifier 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 données de télémétrie Application Insights est généré à partir des journaux de ILogger ?What Application Insights telemetry type is produced from ILogger logs? Ou, où puis-je voir Qu'ilogger journaux dans Application Insights ?Or where can I see ILogger logs in Application Insights?

ApplicationInsightsLoggerProvider capture les journaux ILogger et crée TraceTelemetry à partir de celles-ci.ApplicationInsightsLoggerProvider captures ILogger logs and creates TraceTelemetry from them. Si un objet d’Exception est passé à la Log() méthode sur ILogger, ExceptionTelemetry est créé au lieu de TraceTelemetry.If an Exception object is passed to the Log() method on ILogger, ExceptionTelemetry is created instead of TraceTelemetry. Vous trouverez des ces éléments de télémétrie dans les mêmes emplacements que tout autre TraceTelemetry ou ExceptionTelemetry pour Application Insights, y compris le portail, analytique ou débogueur local de 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 toujours envoyer TraceTelemetry, 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);

Je n’ai pas le Kit de développement logiciel installé, et 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 le nouveau fournisseur ?How do I use the new provider?

L’extension Application Insights dans 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 appsettings.json fichier 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 de moment de la génération en prenant une dépendance NuGet dans le Kit de développement.To take advantage of the new provider, use build-time instrumentation by taking a NuGet dependency on the SDK. Cet article sera mis à jour lors de l’extension change pour utiliser le nouveau fournisseur.This article will be updated when the extension switches to use the new provider.

Je suis à l’aide d’un package autonome Microsoft.Extensions.Logging.ApplicationInsights et l’activation du fournisseur d’Application Insights en appelant générateur. AddApplicationInsights("ikey").I'm using the standalone package Microsoft.Extensions.Logging.ApplicationInsights and enabling Application Insights provider by calling builder.AddApplicationInsights("ikey"). Existe-t-il une option pour 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);
            });
}

La section appropriée à partir de appsettings.json:Relevant section from appsettings.json:

{
  "myikeyfromconfig": "putrealikeyhere"
}

Ce code est requis uniquement lorsque vous utilisez un fournisseur de journalisation autonome.This code is required only when you use a standalone logging provider. Pour l’analyse régulière des Application Insights, la clé d’instrumentation est automatiquement chargée à partir du chemin de configuration ApplicationInsights : Clé d’instrumentation.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: