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のログ