.NET のロギングプロバイダー
ログ プロバイダーは、Console
プロバイダーを除いてログを保持します。ただし、ログは標準出力としてのみ表示されます。 たとえば、Azure Application Insights プロバイダーは、Azure Application Insights にログを格納します。 複数のプロバイダーを有効にすることができます。
既定の .NET Worker アプリ テンプレート:
- 汎用ホストを使用します。
- CreateApplicationBuilderを呼び出すと、次のログ プロバイダーが追加されます。
- コンソール
- デバッグ
- EventSource
- EventLog (Windows のみ)
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
呼び出し、必要なログ プロバイダーを追加します。 たとえば、次のコードです。
- ClearProviders を呼び出して、ビルダーからすべての ILoggerProvider インスタンスを削除します。
- コンソール ロギング プロバイダーを追加します。
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 ストレージにログを書き込みます。
プロバイダー パッケージはランタイム ライブラリに含まれていません。 プロバイダーを使用するには、プロバイダー パッケージをプロジェクトに追加します。
プロバイダー設定を構成するには、次の例に示すように、AzureFileLoggerOptions と AzureBlobLoggerOptionsを使用します。
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 ツールを使用してログのクエリと分析を行うことができます。
詳細については、次のリソースを参照してください。
- Application Insights の概要
- ApplicationInsightsLoggerProvider for .NET Core ILogger ログ - ログ プロバイダーを実装し、Application Insights テレメトリのそれ以外の部分は除く場合は、ここから開始します。
- Application Insights ログ記録アダプター。
- Application Insights SDK - Microsoft Learn サイトの対話型チュートリアルをインストール、構成、初期化します。
ログ プロバイダーの設計に関する考慮事項
ILoggerProvider インターフェイスの独自の実装と ILoggerの対応するカスタム実装を開発する場合は、次の点を考慮してください。
- ILogger.Log メソッドは同期的です。
- ログの状態とオブジェクトの有効期間は、想定しないでください。
ILoggerProvider
の実装では、ILoggerProvider.CreateLogger メソッドを使用して ILogger
が作成されます。 実装が非ブロッキングの方法でメッセージをキューに記録するよう努める場合は、まずメッセージを具体化するか、ログ エントリの具体化に使用されるオブジェクトの状態をシリアル化する必要があります。 これにより、破棄されたオブジェクトからの潜在的な例外を回避できます。
詳細については、「.NETでカスタム ログ プロバイダーを実装する」を参照してください。
サードパーティ製のログ プロバイダー
さまざまな .NET ワークロードで動作するサードパーティのログ記録フレームワークを次に示します。
- elmah.io (GitHub リポジトリ)
- EFLogger (GitHub リポジトリ)
- Gelf (GitHub リポジトリ)
- JSNLog (GitHub リポジトリ)
- KissLog.net (GitHub リポジトリ)
- Log4Net (GitHub リポジトリ)
- NLog (GitHub リポジトリ)
- NReco.Logging (GitHub リポジトリ)
- Sentry (GitHub リポジトリ)
- Serilog (GitHub リポジトリ)
- Stackdriver (GitHub リポジトリ)
一部のサード パーティ製フレームワークでは、セマンティック ログ記録 (構造化されたログ記録とも呼ばれます) を実行できます。
サード パーティ製フレームワークの使用は、組み込みのプロバイダーの 1 つを使用するのと似ています。
- NuGet パッケージをプロジェクトに追加します。
- ログ 記録フレームワークによって提供される
ILoggerFactory
またはILoggingBuilder
拡張メソッドを呼び出します。
詳細については、各プロバイダーのドキュメントを参照してください。 サード パーティのログ プロバイダーは、Microsoft ではサポートされていません。
関連項目
- .NET でのログの記録
- .NETでカスタム ログ プロバイダーを実装します。
- .NETで高パフォーマンスのログ記録を行います。
.NET