次の方法で共有


.NET のロギングプロバイダー

ログ プロバイダーは、Console プロバイダーを除いてログを保持します。ただし、ログは標準出力としてのみ表示されます。 たとえば、Azure Application Insights プロバイダーは、Azure Application Insights にログを格納します。 複数のプロバイダーを有効にすることができます。

既定の .NET Worker アプリ テンプレート:

using Microsoft.Extensions.Hosting;

using IHost host = Host.CreateApplicationBuilder(args).Build();

// Application code should start here.

await host.RunAsync();

上記のコードは、.NET Worker アプリ テンプレートで作成された Program クラスを示しています。 次のいくつかのセクションでは、汎用ホストを使用する .NET Worker アプリ テンプレートに基づくサンプルを提供します。

Host.CreateApplicationBuilderによって追加されたログ プロバイダーの既定のセットをオーバーライドするには、ClearProviders 呼び出し、必要なログ プロバイダーを追加します。 たとえば、次のコードです。

HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);

builder.Logging.ClearProviders();
builder.Logging.AddConsole();

その他のプロバイダーについては、以下を参照してください。

ILogger に依存するサービスを構成する

ILogger<T>に依存するサービスを構成するには、コンストラクターの挿入を使用するか、ファクトリ メソッドを指定します。 ファクトリ メソッドのアプローチは、他のオプションがない場合にのみ推奨されます。 たとえば、DI によって提供される ILogger<T> インスタンスを必要とするサービスを考えてみます。

HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);

builder.Services.AddSingleton<IExampleService>(
    container => new DefaultExampleService
    {
        Logger = container.GetRequiredService<ILogger<IExampleService>>()
    });

上記のコードは、DI コンテナーが初めて IExampleServiceのインスタンスを構築する必要がある場合に実行する、Func<IServiceProvider、IExampleService> です。 登録されているサービスには、この方法でアクセスできます。

組み込みのログプロバイダー

Microsoft 拡張機能には、ランタイム ライブラリの一部として次のログ プロバイダーが含まれています。

次のログ プロバイダーは Microsoft によって提供されますが、ランタイム ライブラリの一部ではありません。 追加の NuGet パッケージとしてインストールする必要があります。

コンソール

Console プロバイダーは、出力をコンソールに記録します。

デバッグ

Debug プロバイダーは、System.Diagnostics.Debug クラスを使用してログ出力を書き込みます。具体的には、Debug.WriteLine メソッドを使用し、デバッガーがアタッチされている場合にのみ書き込みます。 DebugLoggerProvider は、ILogger インターフェイスを実装するロガー クラスのインスタンスを作成します。

イベントソース

EventSource プロバイダーは、Microsoft-Extensions-Loggingという名前のクロスプラットフォーム イベント ソースに書き込みます。 Windows では、プロバイダーは ETW 使用します。

dotnet trace ツール

dotnet-trace ツールは、実行中のプロセスの .NET Core トレースの収集を可能にするクロスプラットフォーム CLI グローバル ツールです。 このツールは、LoggingEventSourceを使用して Microsoft.Extensions.Logging.EventSource プロバイダー データを収集します。

インストール手順については、dotnet-trace を参照してください。 dotnet-traceを使用した診断チュートリアルについては、「.NET Core で高い CPU 使用率をデバッグするを参照してください。

Windows イベントログ

EventLog プロバイダーは、ログ出力を Windows イベント ログに送信します。 他のプロバイダーとは異なり、EventLog プロバイダーでは既定のプロバイダー以外の設定が継承 "されません"。 EventLog ログ設定が指定されていない場合は、既定で LogLevel.Warningに設定されます。

LogLevel.Warning未満のイベントをログに記録するには、ログ レベルを明示的に設定します。 次の例では、イベント ログの既定のログ レベルを LogLevel.Informationに設定します。

"Logging": {
  "EventLog": {
    "LogLevel": {
      "Default": "Information"
    }
  }
}

AddEventLog のオーバーロードを使用すると、EventLogSettings を渡すことができます。 null または指定されていない場合は、次の既定の設定が使用されます。

  • LogName: "アプリケーション"
  • SourceName: ".NET ランタイム"
  • MachineName: ローカル コンピューター名が使用されます。

次のコードは、SourceName を既定値の ".NET Runtime" から CustomLogsに変更します。

HostApplicationBuilder builder = Host.CreateApplicationBuilder(args);

builder.Logging.AddEventLog(
    config => config.SourceName = "CustomLogs");

using IHost host = builder.Build();

host.Run();

Azure App Service

Microsoft.Extensions.Logging.AzureAppServices プロバイダー パッケージは、Azure App Service アプリのファイル システムのテキスト ファイルと、Azure Storage アカウントの BLOB ストレージにログを書き込みます。

プロバイダー パッケージはランタイム ライブラリに含まれていません。 プロバイダーを使用するには、プロバイダー パッケージをプロジェクトに追加します。

プロバイダー設定を構成するには、次の例に示すように、AzureFileLoggerOptionsAzureBlobLoggerOptionsを使用します。

using Microsoft.Extensions.Logging.AzureAppServices;

HostApplicationBuilder builder = Host.CreateApplicationBuilder(args)

builder.Logging.AddAzureWebAppDiagnostics();
builder.Services.Configure<AzureFileLoggerOptions>(options =>
{
    options.FileName = "azure-diagnostics-";
    options.FileSizeLimit = 50 * 1024;
    options.RetainedFileCountLimit = 5;
});
builder.Services.Configure<AzureBlobLoggerOptions>(options =>
{
    options.BlobName = "log.txt";
});

using IHost host = builder.Build();

// Application code should start here.

await host.RunAsync();

Azure App Service にデプロイすると、アプリは Azure portal の App Service ページの App Service ログ セクションの設定を使用します。 次の設定が更新されると、変更はすぐに有効になります。アプリの再起動や再デプロイは必要ありません。

ログ ファイルの既定の場所は、D:\home\LogFiles\Application フォルダーにあります。 その他の既定値は、プロバイダーによって異なります。

  • アプリケーション ログ (ファイルシステム): 既定のファイル システム ファイル名は diagnostics-yyyymmdd.txtです。 既定のファイル サイズ制限は 10 MB で、保持されるファイルの既定の最大数は 2 です。
  • アプリケーション ログ (BLOB): 既定の BLOB 名は {app-name}/yyyy/mm/dd/hh/{guid}_applicationLog.txtです。

このプロバイダーは、プロジェクトが Azure 環境で実行されている場合にのみログを記録します。

Azure ログ ストリーミング

Azure ログ ストリーミングでは、次のログ アクティビティをリアルタイムで表示できます。

  • アプリ サーバー
  • Web サーバー
  • 要求トレースの失敗

Azure ログ ストリーミングを構成するには:

  • アプリのポータル ページから App Service ログ ページに移動します。
  • アプリケーション ログ (ファイルシステム) に設定します。
  • ログ [レベル] を選択します。 この設定は、Azure ログ ストリーミングにのみ適用されます。

ログ ストリームの ページに移動して、ログを表示します。 ログに記録されたメッセージは、ILogger インターフェイスでログに記録されます。

Azure Application Insights

Microsoft.Extensions.Logging.ApplicationInsights プロバイダー パッケージは、Azure Application Insights にログを書き込みます。 Application Insights は、Web アプリを監視し、テレメトリ データのクエリと分析のためのツールを提供するサービスです。 このプロバイダーを使用する場合は、Application Insights ツールを使用してログのクエリと分析を行うことができます。

詳細については、次のリソースを参照してください。

ログ プロバイダーの設計に関する考慮事項

ILoggerProvider インターフェイスの独自の実装と ILoggerの対応するカスタム実装を開発する場合は、次の点を考慮してください。

  • ILogger.Log メソッドは同期的です。
  • ログの状態とオブジェクトの有効期間は、想定しないでください。

ILoggerProvider の実装では、ILoggerProvider.CreateLogger メソッドを使用して ILogger が作成されます。 実装が非ブロッキングの方法でメッセージをキューに記録するよう努める場合は、まずメッセージを具体化するか、ログ エントリの具体化に使用されるオブジェクトの状態をシリアル化する必要があります。 これにより、破棄されたオブジェクトからの潜在的な例外を回避できます。

詳細については、「.NETでカスタム ログ プロバイダーを実装する」を参照してください。

サードパーティ製のログ プロバイダー

さまざまな .NET ワークロードで動作するサードパーティのログ記録フレームワークを次に示します。

一部のサード パーティ製フレームワークでは、セマンティック ログ記録 (構造化されたログ記録とも呼ばれます) を実行できます。

サード パーティ製フレームワークの使用は、組み込みのプロバイダーの 1 つを使用するのと似ています。

  1. NuGet パッケージをプロジェクトに追加します。
  2. ログ 記録フレームワークによって提供される ILoggerFactory または ILoggingBuilder 拡張メソッドを呼び出します。

詳細については、各プロバイダーのドキュメントを参照してください。 サード パーティのログ プロバイダーは、Microsoft ではサポートされていません。

関連項目