ApplicationInsightsLoggerProvider for .NET Core の ILogger ログApplicationInsightsLoggerProvider for .NET Core ILogger logs

ASP.NET Core では、さまざまな種類の組み込みおよびサードパーティ製のログ記録プロバイダーで動作するログ記録 API がサポートされています。ASP.NET Core supports a logging API that works with different kinds of built-in and third-party logging providers. ログ記録は、Log() またはそのバリエーションを ILogger インスタンスで呼び出すことにより行われます。Logging is done by calling Log() or a variant of it on ILogger instances. この記事では、ApplicationInsightsLoggerProvider を使用して、コンソールと ASP.NET Core アプリケーションで ILogger ログをキャプチャする方法を示します。This article demonstrates how to use ApplicationInsightsLoggerProvider to capture ILogger logs in console and ASP.NET Core applications. また、この記事では、ApplicationInsightsLoggerProvider を他の Application Insights テレメトリと統合する方法についても説明します。This article also describes how ApplicationInsightsLoggerProvider integrates with other Application Insights telemetry. 詳しくは、「ASP.NET Core でのログ記録」をご覧ください。To learn more, see Logging in ASP.NET Core.

ASP.NET Core アプリケーションASP.NET Core applications

Microsoft.ApplicationInsights.AspNet SDK バージョン 2.7.1 (以降) では、次のいずれかの標準の方法を使用して通常の Application Insights の監視を有効にすると、ApplicationInsightsLoggerProvider が既定で有効になります。ApplicationInsightsLoggerProvider is enabled by default in Microsoft.ApplicationInsights.AspNet SDK version 2.7.1 (and later) when you turn on regular Application Insights monitoring through either of the standard methods:

  • IWebHostBuilder で UseApplicationInsights 拡張メソッドを呼び出すBy calling the UseApplicationInsights extension method on IWebHostBuilder
  • IServiceCollection で AddApplicationInsightsTelemetry 拡張メソッドを呼び出すBy calling the AddApplicationInsightsTelemetry extension method on IServiceCollection

ApplicationInsightsLoggerProvider によってキャプチャされる ILogger ログには、収集される他のテレメトリと同じ構成が適用されます。ILogger logs that ApplicationInsightsLoggerProvider captures are subject to the same configuration as any other telemetry that's collected. 他のテレメトリと同じ TelemetryInitializer と TelemetryProcessor のセットを持ち、同じ TelemetryChannel を使用し、同じ方法で相関およびサンプリングされます。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. バージョン 2.7.1 以降を使用する場合は、ILogger ログをキャプチャするために操作は必要ありません。If you use version 2.7.1 or later, no action is required to capture ILogger logs.

既定では、(すべてのカテゴリから) "警告" 以上の ILogger ログのみが Application Insights に送信されます。Only Warning or higher ILogger logs (from all categories) are sent to Application Insights by default. ただし、フィルターを適用してこの動作を変更することができます。But you can apply filters to modify this behavior. Program.cs または Startup.cs から ILogger ログをキャプチャするには、追加の手順が必要です。Additional steps are required to capture ILogger logs from Program.cs or Startup.cs. (「ASP.NET Core アプリの Startup.cs と Program.cs から ILogger ログをキャプチャする」をご覧ください。)(See Capturing ILogger logs from Startup.cs and Program.cs in ASP.NET Core applications.)

以前のバージョンの Microsoft.ApplicationInsights.AspNet SDK を使用している場合、または Application Insights の他の監視を行わずに ApplicationInsightsLoggerProvider だけを使いたい場合は、以下の手順のようにします。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. NuGet パッケージをインストールします。Install the NuGet package:

        <ItemGroup>
          <PackageReference Include="Microsoft.Extensions.Logging.ApplicationInsights" Version="2.9.1" />  
        </ItemGroup>
    
  2. Program.cs を次のように変更します。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);
                }
            );
    }
    

ステップ 2 のコードでは、ApplicationInsightsLoggerProvider が構成されます。The code in step 2 configures ApplicationInsightsLoggerProvider. 次のコードでは、ILogger を使用してログを送信する Controller クラスの例を示します。The following code shows an example Controller class, which uses ILogger to send logs. ログは 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" };
    }
}

ASP.NET Core アプリの Startup.cs と Program.cs から ILogger ログをキャプチャするCapture ILogger logs from Startup.cs and Program.cs in ASP.NET Core apps

注意

ASP.NET Core 3.0 以降では、Program.cs および Startup.cs 内に ILogger を挿入できなくなりました。In ASP.NET Core 3.0 and later, it is no longer possible to inject ILogger in Startup.cs and Program.cs. 詳細については、 https://github.com/aspnet/Announcements/issues/353 をご覧ください。See https://github.com/aspnet/Announcements/issues/353 for more details.

新しい ApplicationInsightsLoggerProvider では、アプリケーション スタートアップ パイプラインの早い段階からログをキャプチャできます。The new ApplicationInsightsLoggerProvider can capture logs from early in the application-startup pipeline. ApplicationInsightsLoggerProvider は Application Insights (バージョン 2.7.1 以降) で自動的に有効になりますが、インストルメンテーション キーはパイプライン内の後の方まで設定されません。Although ApplicationInsightsLoggerProvider is automatically enabled in Application Insights (starting with version 2.7.1), it doesn't have an instrumentation key set up until later in the pipeline. そのため、Controller/その他クラスからのログのみがキャプチャされます。So, only logs from Controller/other classes will be captured. Program.cs および Startup.cs 自体以降のすべてのログをキャプチャするには、ApplicationInsightsLoggerProvider のインストルメンテーション キーを明示的に有効にする必要があります。To capture every log starting with Program.cs and Startup.cs itself, you must explicitly enable an instrumentation key for ApplicationInsightsLoggerProvider. また、Program.cs または Startup.cs 自体からログを記録するときは、TelemetryConfiguration は完全にはセットアップされません。Also, TelemetryConfiguration is not fully set up when you log from Program.cs or Startup.cs itself. したがって、これらのログの構成は InMemoryChannel を使用する最小限のものであり、サンプリングは行われず、標準のテレメトリ初期化子またはプロセッサはありません。So those logs will have a minimum configuration that uses InMemoryChannel, no sampling, and no standard telemetry initializers or processors.

次の例では、Program.cs および Startup.cs でのこの機能を示します。The following examples demonstrate this capability with Program.cs and Startup.cs.

Program.cs の例Example 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);
            }
        );
}

Startup.cs の例Example 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();
    }
}

古い ApplicationInsightsLoggerProvider から移行するMigrate from the old ApplicationInsightsLoggerProvider

2.7.1 より前の Microsoft.ApplicationInsights.AspNet SDK バージョンは、現在は廃止されているログ プロバイダーをサポートしていました。Microsoft.ApplicationInsights.AspNet SDK versions before 2.7.1 supported a logging provider that's now obsolete. このプロバイダーは、ILoggerFactory の AddApplicationInsights() 拡張メソッドによって有効にされました。This provider was enabled through the AddApplicationInsights() extension method of ILoggerFactory. 次の 2 つのステップで、新しいプロバイダーに移行することをお勧めします。We recommend that you migrate to the new provider, which involves two steps:

  1. ログ記録が二重に行われないよう、ILoggerFactory.AddApplicationInsights() の呼び出しを Startup.Configure() メソッドから削除します。Remove the ILoggerFactory.AddApplicationInsights() call from the Startup.Configure() method to avoid double logging.
  2. 新しいプロバイダーでは考慮されないため、コード内のすべてのフィルタリング規則を再適用します。Reapply any filtering rules in code, because they will not be respected by the new provider. ILoggerFactory.AddApplicationInsights() のオーバーロードでは、最小限の LogLevel またはフィルター関数が取得されました。Overloads of ILoggerFactory.AddApplicationInsights() took minimum LogLevel or filter functions. 新しいプロバイダーでは、フィルタリングはログ記録フレームワーク自体の一部です。With the new provider, filtering is part of the logging framework itself. Application Insights プロバイダーでは行われません。It's not done by the Application Insights provider. そのため、ILoggerFactory.AddApplicationInsights() のオーバーロードによって提供されるすべてのフィルターを削除する必要があります。So any filters that are provided via ILoggerFactory.AddApplicationInsights() overloads should be removed. そして、「ログ記録レベルの制御」の説明に従ってフィルタリング規則を提供する必要があります。And filtering rules should be provided by following the Control logging level instructions. appsettings.json を使用してログをフィルター処理している場合は、新しいプロバイダーでも引き続き動作します。どちらでも、同じプロバイダー別名 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.

まだ古いプロバイダーを使用できます。You can still use the old provider. (メジャー バージョンが 3.xx に変更されるときにだけ削除されます。)ただし、次の理由で、新しいプロバイダーに移行することをお勧めします。(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:

  • 以前のプロバイダーにはログ スコープのサポートがありません。The previous provider lacks support for log scopes. 新しいプロバイダーでは、スコープからのプロパティが、収集されるテレメトリにカスタム プロパティとして自動的に追加されます。In the new provider, properties from scope are automatically added as custom properties to the collected telemetry.
  • アプリケーション スタートアップ パイプラインのはるかに早い段階で、ログをキャプチャできます。Logs can now be captured much earlier in the application startup pipeline. Program クラスと Startup クラスからのログをキャプチャできるようになっています。Logs from the Program and Startup classes can now be captured.
  • 新しいプロバイダーでは、フィルタリングがフレームワーク レベル自体で行われます。With the new provider, filtering is done at the framework level itself. コンソールやデバッグといった組み込みプロバイダーなどの他のプロバイダーと同じ方法で、Application Insights プロバイダーへのログのフィルタリングを行うことができます。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. また、複数のプロバイダーに同じフィルターを適用することもできます。You can also apply the same filters to multiple providers.
  • ASP.NET Core (2.0 以降) でログ記録プロバイダーを有効にする推奨される方法は、Program.cs 自体の ILoggingBuilder で拡張メソッドを使用することです。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.

注意

新しいプロバイダーは、NETSTANDARD2.0 以降を対象とするアプリケーションで使用できます。The new provider is available for applications that target NETSTANDARD2.0 or later. アプリケーションが .NET Core 1.1 のような古いバージョンの .NET Core または .NET Framework を対象にしている場合は、引き続き古いプロバイダーを使用してください。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.

コンソール アプリケーションConsole application

注意

任意のコンソール アプリケーションに対して Application Insights (ILogger やその他の Application Insights テレメトリ) を有効にするために使用できる、Microsoft.ApplicationInsights.WorkerService と呼ばれる新しい Application Insights SDK が存在します。There is a new Application Insights SDK called Microsoft.ApplicationInsights.WorkerService which can used to enable Application Insights (ILogger and other Application Insights telemetry) for any Console Applications. このパッケージおよび関連する手順は、ここから使用することをお勧めします。It is recommended to use this package and associated instructions from here.

ILogger のトレースを Application Insights に送信するように構成されたコンソール アプリケーションのコードの例を次に示します。The following code shows a sample console application that's configured to send ILogger traces to Application Insights.

インストール済みパッケージ: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);
    }
}

この例では、スタンドアロン パッケージ Microsoft.Extensions.Logging.ApplicationInsights を使用しています。This example uses the standalone package Microsoft.Extensions.Logging.ApplicationInsights. 既定では、この構成では、Application Insights にデータを送信するために、"必要最小限" の TelemetryConfiguration が使用されます。By default, this configuration uses the "bare minimum" TelemetryConfiguration for sending data to Application Insights. 必要最小限とは、InMemoryChannel が使用されるチャネルであることを示します。Bare minimum means that InMemoryChannel is the channel that's used. サンプリングも標準の TelemetryInitializer もありません。There's no sampling and no standard TelemetryInitializers. この動作は、コンソール アプリケーションでは、次の例に示すようにオーバーライドできます。This behavior can be overridden for a console application, as the following example shows.

次の追加パッケージをインストールします。Install this additional package:

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

次のセクションでは、services.Configure<TelemetryConfiguration>() メソッドを使用して既定の TelemetryConfiguration をオーバーライドする方法を示します。The following section shows how to override the default TelemetryConfiguration by using the services.Configure<TelemetryConfiguration>() method. この例では、ServerTelemetryChannel とサンプリングを設定します。This example sets up ServerTelemetryChannel and sampling. カスタム ITelemetryInitializer を 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);

ログ記録レベルの制御Control logging level

ASP.NET Core の ILogger インフラには、ログのフィルタリングを適用するための組み込みメカニズムがあります。The ASP.NET Core ILogger infra has a built-in mechanism to apply log filtering. これにより、Application Insights プロバイダーなどの、各登録済みプロバイダーに送信されるログを制御できます。This lets you control the logs that are sent to each registered provider, including the Application Insights provider. フィルター処理は、構成 (通常は appsettings.json ファイルを使用) またはコードで行うことができます。The filtering can be done either in configuration (typically by using an appsettings.json file) or in code. この機能は、フレームワーク自体によって提供されます。This facility is provided by the framework itself. Application Insights プロバイダーに固有ではありません。It's not specific to the Application Insights provider.

次の例では、ApplicationInsightsLoggerProvider にフィルター規則を適用します。The following examples apply filter rules to ApplicationInsightsLoggerProvider.

appsettings.json を使用して構成でフィルター規則を作成するCreate filter rules in configuration with appsettings.json

ApplicationInsightsLoggerProvider では、プロバイダーの別名は ApplicationInsights です。For ApplicationInsightsLoggerProvider, the provider alias is ApplicationInsights. appsettings.json の次のセクションでは、すべてのカテゴリからの "警告" 以上と、"Microsoft" で始まるカテゴリからの "エラー" 以上が、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": "*"
}

コードでフィルター規則を作成するCreate filter rules in code

次のコード スニペットでは、すべてのカテゴリからの "警告" 以上と、"Microsoft" で始まるカテゴリからの "エラー" 以上が、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. この構成は、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);

よく寄せられる質問Frequently asked questions

ApplicationInsightsLoggerProvider の古いバージョンと新しいバージョンとは何ですか?What are the old and new versions of ApplicationInsightsLoggerProvider?

Microsoft.ApplicationInsights.AspNet SDK には組み込みの ApplicationInsightsLoggerProvider (Microsoft.ApplicationInsights.AspNetCore.Logging.ApplicationInsightsLoggerProvider) が含まれており、ILoggerFactory 拡張メソッドを使用して有効にしました。Microsoft.ApplicationInsights.AspNet SDK included a built-in ApplicationInsightsLoggerProvider (Microsoft.ApplicationInsights.AspNetCore.Logging.ApplicationInsightsLoggerProvider), which was enabled through ILoggerFactory extension methods. このプロバイダーは、バージョン 2.7.1 からは廃止とマークされています。This provider is marked obsolete from version 2.7.1. 次のメジャー バージョンの変更で完全に削除されます。It will be removed completely in the next major version change. Microsoft.ApplicationInsights.AspNetCore 2.6.1 パッケージ自体は古くありません。The Microsoft.ApplicationInsights.AspNetCore 2.6.1 package itself isn't obsolete. 要求や依存関係などの監視を有効にするために必要です。It's required to enable monitoring of requests, dependencies, and so on.

推奨される代替手段は、改善された ApplicationInsightsLoggerProvider (Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider) と、それを有効にするための ILoggerBuilder の拡張メソッドが含まれる、新しいスタンドアロン パッケージ Microsoft.Extensions.Logging.ApplicationInsights です。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.

Microsoft.ApplicationInsights.AspNet SDK バージョン 2.7.1 は新しいパッケージへの依存関係を取得し、ILogger のキャプチャを自動的に有効にします。Microsoft.ApplicationInsights.AspNet SDK version 2.7.1 takes a dependency on the new package and enables ILogger capture automatically.

一部の ILogger ログが Application Insights に 2 回表示されるのはなぜですか?Why are some ILogger logs shown twice in Application Insights?

ILoggerFactoryAddApplicationInsights を呼び出すことによって、古い (廃止されている) バージョンの ApplicationInsightsLoggerProvider を有効にした場合、重複が発生する可能性があります。Duplication can occur if you have the older (now obsolete) version of ApplicationInsightsLoggerProvider enabled by calling AddApplicationInsights on ILoggerFactory. Configure メソッドに次のような行があるかどうかを確認し、ある場合はそれを削除してください。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.
 }

Visual Studio からデバッグすると二重のログ記録が発生する場合は、次のように、Application Insights を有効にするコードで EnableDebugLoggerfalse に設定します。If you experience double logging when you debug from Visual Studio, set EnableDebugLogger to false in the code that enables Application Insights, as follows. この重複と修正は、アプリケーションをデバッグするときにのみ関係します。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.
 }

Microsoft.ApplicationInsights.AspNet SDK バージョン 2.7.1 に更新しており、ILogger からのログが自動的にキャプチャされます。I updated to Microsoft.ApplicationInsights.AspNet SDK version 2.7.1, and logs from ILogger are captured automatically. この機能を完全にオフにするにはどうすればよいですか?How do I turn off this feature completely?

ログ記録をフィルター処理する一般的な方法については、「ログ記録レベルの制御」セクションをご覧ください。See the Control logging level section to see how to filter logs in general. ApplicationInsightsLoggerProvider をオフにするには、LogLevel.None を使用します。To turn-off ApplicationInsightsLoggerProvider, use LogLevel.None:

コードの場合:In code:

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

構成の場合:In config:

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

一部の ILogger ログのプロパティが他と同じではないのはなぜですか?Why do some ILogger logs not have the same properties as others?

Application Insights では、他のすべてのテレメトリに使用されるのと同じ TelemetryConfiguration を使用して、ILogger ログのキャプチャと送信が行われます。Application Insights captures and sends ILogger logs by using the same TelemetryConfiguration that's used for every other telemetry. ただし、例外があります。But there's an exception. 既定では、Program.cs または Startup.cs からログを記録するときは、TelemetryConfiguration は完全にはセットアップされません。By default, TelemetryConfiguration is not fully set up when you log from Program.cs or Startup.cs. これらの場所からのログには既定の構成がないため、すべての TelemetryInitializers と TelemetryProcessors は実行されません。Logs from these places won't have the default configuration, so they won't be running all TelemetryInitializers and TelemetryProcessors.

スタンドアロン パッケージ Microsoft.Extensions.Logging.ApplicationInsights を使用しており、いくつかの追加カスタム テレメトリを手動でログに記録しようと考えています。I'm using the standalone package Microsoft.Extensions.Logging.ApplicationInsights, and I want to log some additional custom telemetry manually. どうすればよいですか?How should I do that?

スタンドアロン パッケージを使用すると、TelemetryClient が DI コンテナーに挿入されないので、次に示すように、TelemetryClient の新しいインスタンスを作成し、ロガー プロバイダーで使われるものと同じ構成を使用する必要があります。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. これにより、カスタム テレメトリと、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;
   }  
}

注意

Microsoft.ApplicationInsights.AspNetCore パッケージを使用して Application Insights を有効にする場合は、このコードを変更して、コンストラクター内で直接 TelemetryClient を取得します。If you use the Microsoft.ApplicationInsights.AspNetCore package to enable Application Insights, modify this code to get TelemetryClient directly in the constructor. 例については、こちらの FAQ をご覧ください。For an example, see this FAQ.

ILogger ログからはどのような種類の Application Insights テレメトリが生成されますか?What Application Insights telemetry type is produced from ILogger logs? または、Application Insights ではどこで ILogger ログを見ることができますか?Or where can I see ILogger logs in Application Insights?

ApplicationInsightsLoggerProvider では、ILogger ログがキャプチャされて、それから TraceTelemetry が作成されます。ApplicationInsightsLoggerProvider captures ILogger logs and creates TraceTelemetry from them. ILogger で Log() メソッドに Exception オブジェクトを渡した場合、TraceTelemetry の代わりに ExceptionTelemetry が作成されます。If an Exception object is passed to the Log() method on ILogger, ExceptionTelemetry is created instead of TraceTelemetry. これらのテレメトリ項目は、ポータル、分析、Visual Studio ローカル デバッガーなど、Application Insights の他の TraceTelemetry または ExceptionTelemetry と同じ場所で見ることができます。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.

TraceTelemetry を常に送信したい場合は、次のスニペットを使用します。 builder.AddApplicationInsights((opt) => opt.TrackExceptionsAsExceptionTelemetry = false);If you prefer to always send TraceTelemetry, use this snippet: builder.AddApplicationInsights((opt) => opt.TrackExceptionsAsExceptionTelemetry = false);

SDK をインストールせず、Azure Web Apps 拡張機能を使用して ASP.NET Core アプリケーションの Application Insights を有効にしています。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. 新しいプロバイダーを使用するにはどうすればよいですか?How do I use the new provider?

Azure Web Apps の Application Insights 拡張機能は、新しいプロバイダーを使用します。The Application Insights extension in Azure Web Apps uses the new provider. フィルタリング規則は、アプリケーションの appsettings.json ファイルで変更することができます。You can modify the filtering rules in the appsettings.json file for your application.

スタンドアロン パッケージの Microsoft.Extensions.Logging.ApplicationInsights を使用し、builder.AddApplicationInsights("ikey") を呼び出すことによって Application Insights プロバイダーを有効にしています。I'm using the standalone package Microsoft.Extensions.Logging.ApplicationInsights and enabling Application Insights provider by calling builder.AddApplicationInsights("ikey"). 構成からインストルメンテーション キーを取得するオプションはありますか?Is there an option to get an instrumentation key from configuration?

Program.cs と appsettings.json を次のように変更します。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);
            });
}

appsettings.json からの関連するセクション:Relevant section from appsettings.json:

{
  "myikeyfromconfig": "putrealikeyhere"
}

このコードは、スタンドアロンのログ記録プロバイダーを使用する場合にのみ必要です。This code is required only when you use a standalone logging provider. Application Insights の通常の監視では、インストルメンテーション キーは構成パス ApplicationInsights:Instrumentationkey から自動的に読み込まれます。For regular Application Insights monitoring, the instrumentation key is loaded automatically from the configuration path ApplicationInsights: Instrumentationkey. Appsettings.json は次のようになります。Appsettings.json should look like this:

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

次の手順Next steps

各項目の詳細情報Learn more about: