ASP.NET Coreのログ
6693 ワード
1.はじめに
ASP.NET Coreは、さまざまな組み込みおよびサードパーティのログ記録提供アプリケーションに適したログ記録APIをサポートします.この文書では、ログ記録APIを内蔵プロバイダアプリケーションとともに使用する方法について説明します.
2.ログプロバイダの追加
ログ・レコードは、アプリケーションがログを表示または格納することを提供します.たとえば、コンソール提供アプリケーションはコンソールにログを表示し、AzureアプリケーションはこれらのログをAzureアプリケーションに保存します.提供アプリケーションを追加するには、Program.csでプロバイダを呼び出すAdd{provider name}拡張方法:
public static void Main(string[] args)
{
var webHost = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.ConfigureAppConfiguration((hostingContext, config) =>
{
var env = hostingContext.HostingEnvironment;
config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json",
optional: true, reloadOnChange: true);
config.AddEnvironmentVariables();
})
.ConfigureLogging((hostingContext, logging) =>
{
// appsettings.json Logging
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
//
logging.AddConsole();
// Debug
logging.AddDebug();
// EventSource
logging.AddEventSourceLogger();
})
.UseStartup()
.Build();
webHost.Run();
}
デフォルトのプロジェクトテンプレートでは、アプリケーションに追加ログ(コンソール、DEBUG、EventSource)を提供するCreateDefaultBuilderが呼び出されます.
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup();
3.ログの作成
作成ログは依存注入(DI)からILoggerオブジェクトを取得する.次のRazorページの例では、レベルがInformationで、カテゴリがAboutModelクラス(Models/AboutModel)のログが作成されます.
public class AboutModel
{
private readonly ILogger _logger;
public AboutModel(ILogger logger)
{
//ILogger Core , ,
_logger = logger;
}
public void OnGet()
{
var Message = $"About page visited at {DateTime.UtcNow.ToLongTimeString()}";
_logger.LogInformation("Message displayed: {Message}", Message);
}
}
private readonly ILogger _logger;
public HomeController(ILogger logger)
{
_logger = logger;
}
public IActionResult Index()
{
AboutModel aboutModel = new AboutModel(_logger);
aboutModel.OnGet();
return View();
}
Kestralサーバでデバッグを開始するには、次の手順に従います.
コンソール出力ログを見てください.
ログ・レベルは、記録されたイベントの重大度を表します.ログ「カテゴリ」は、各ログに関連付けられた文字列です.ILoggerインスタンスは、タイプTの完全修飾名である「カテゴリ」のログを作成します.
3.1起動時(Startup)ログの作成
Startupクラスにログを書き込むには、コンストラクタ署名にILoggerパラメータを含める必要があります.
public class Startup
{
private readonly ILogger _logger;
public Startup(IConfiguration configuration, ILogger logger)
{
Configuration = configuration;
_logger = logger;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
_logger.LogInformation("Added TodoRepository to services");
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
_logger.LogInformation("In Development environment");
}
}
}
Kestralサーバでデバッグを開始し、コンソール出力ログを確認します.
3.2プログラムにログを作成する
CreateDefaultBuilderを使用する場合は、デフォルトのアプリケーションの代わりにアプリケーションを提供することを自分で選択できます.ClearProvidersを呼び出し、必要なアプリケーションを追加します.
public class Program
{
public static void Main(string[] args)
{
var host = CreateWebHostBuilder(args).Build();
var logger = host.Services.GetRequiredService>();
logger.LogInformation("Seeded the database.");
host.Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup()
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.AddConsole();
});
}
Kestralサーバでデバッグを開始し、コンソール出力ログを確認します.
4.Configuration
ログ・ログ・プロバイダ構成は、1つ以上の構成プロバイダによって提供されます.●ファイル・フォーマット(INI、JSON、XML).●コマンドラインパラメータ.●環境変数.●メモリの.NETオブジェクト.●暗号化されていない機密管理装置の記憶.・Azure Key Vaultなどの暗号化されたユーザストレージ.●(インストール済みまたは作成済み)カスタムプロバイダ.例えば、ログ構成は、通常、アプリケーション設定ファイルのLoggingセクションによって提供される.次の例は、一般的なappsettingsを示す.Development.jsonファイルの内容:
{
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
},
"Console":
{
"IncludeScopes": true
}
}
}
Loggingプロパティには、LogLevelおよびログ・プロバイダのプロパティ(表示コンソール)があります.Loggingの下のLogLevel属性は、選択したカテゴリを記録するための最下位レベルを指定します.この例では、SystemおよびMicrosoftカテゴリはInformationレベルで記録され、その他はDebugレベルで記録されます.プロバイダがログ役割ドメインをサポートしている場合、IncludeScopesはこれらのドメインを有効にするかどうかを示します.
5.ログ・レベル
各ログにはLogLevel値が指定されています.ログ・レベルは、重大度または重要度を示します.LogLevelがWarningレベルの場合、トレーストレース、デバッグ、Informationレベルは記録されません.ASP.NET Coreでは、●トレーストレーストレース=0●デバッグDebug=1●情報Information=2●警告Warning=3●エラーError=4●クリティカルCritical=5というログレベルを定義しています
6.内蔵ロギングプロバイダ
●コンソール:logging.AddConsole(); dotnet runコンソールログ出力を表示します.●デバッグ:logging.AddDebug(); Linuxでは、このプロバイダは/var/log/messageにログを書き込みます.●EventSource:logging.AddEventSourceLogger();Windowsでは、PerfViewユーティリティを使用してログを収集および表示しますが、LinuxまたはmacOSをサポートするイベントセットおよび表示ツールはありません.●EventLog:logging.AddEventLog();Windowsイベントログにログ出力を送信します.●TraceSource:logging.AddTraceSource(sourceSwitchName);アプリケーションは.NET Framework(.NET Coreではなく)で実行します.
7.サードパーティログプロバイダ
ASPに適用する.NET Coreのサードパーティログ記録フレームワーク、リンクアドレス公式ドキュメントには●elmah.io(GitHubリポジトリ)●Gelf(GitHubリポジトリ)●JSNLOg(GitHubリポジトリ)●KissLog.Net(GitHubリポジトリ)●Loggr(GitHubリポジトリ)●Nlog(GitHubリポジトリ)●Sentry(GitHubリポジトリ)●Serilog(GitHubリポジトリ)●Stackdriver(Githubリポジトリ)は、例えるNlog:Nlogを用いる柔軟な無料ログ記録プラットフォームであり、各種類に適用する.NETプラットフォーム、含む.NET標準.Nlogは複数のターゲットを簡単に書き込むことができます.(データベース、ファイル、コンソール)ログの構成を即時に変更します.
8.まとめ
この文章は主にaspについて話した.Netcoreに内蔵されたログプロバイダでは、内蔵されたログに付属する機能は限られています.例えば、書き込めません.txtファイルまたはデータベース.プロジェクトの使用中にサードパーティのログプロバイダを使用することも考慮します.本編では、内蔵されているログプロバイダについて、ログメッセージテンプレート、ログ役割ドメイン、Azureのログ記録、ログイベントIDなどは紹介されていませんが、具体的には公式ドキュメントを参照してください.
参考文献:ASP.NET Coreのログ
(14)ASP.NET Coreのログ