web-dev-qa-db-ja.com

ASP.NET Core 2.1でSerilog構成を解釈するにはどうすればよいですか?

何らかの理由で、Serilog構成で何が起こっているのかを理解するのは非常に難しいと感じています。 .NET Core 2.1でWeb APIを使用し、serilog.sink.logstashをインストールしました。私のスタートアップは:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    var serverURL = Configuration.GetSection("Logging")["logstashServer"];
    var logger = new LoggerConfiguration()
        .Enrich.FromLogContext()
        .Enrich.WithProperty("Enviroment", env.EnvironmentName)
        .Enrich.WithProperty("ApplicationName", "MyApp")
        .WriteTo.LogstashHttp(serverURL);           

    if (env.IsDevelopment())
    {         
        app.UseDeveloperExceptionPage();
        logger.WriteTo.Console();
    }

    loggerFactory.AddSerilog();

    Log.Logger = logger.CreateLogger();

    app.UseCors("CorsPolicy");
    app.UseMvc();
}

私のappsettingsにはセクションがあります:

"Logging": {
  "logstashServer": "http://192.168.0.6:8101",
  "IncludeScopes": false,
  "Serilog": {
    "MinimumLevel": {
      "Default": "Error",
      "Override": {
        "Microsoft": "Error",
        "Microsoft.AspNetCore.Hosting": "Error",
        "Microsoft.AspNetCore.Mvc": "Error",
        "System": "Error"
      }
    }
  }
}

私が何をしても、多くの不要な情報が次のように記録されるよりも、コンソールとlogstashの両方に表示されます。

[14:27:54 INF]アクションメソッドMyApp.Controllers.LoggerController.Post(MyApp)を実行し、結果Microsoft.AspNetCore.Mvc.OkResultを0.0771msで返しました。
MyApp> [14:27:54 INF] HttpStatusCodeResultの実行、HTTPステータスコード200の設定
MyApp> [14:27:54 INF] 2.0855msで実行されたアクションMyApp.Controllers.LoggerController.Post(MyApp)

等々。最小レベルのエラーがあるのに、なぜそれらを見るのですか?

15
gong

Serilogのログレベルをオーバーライドするための構成をappsettings.jsonに追加しましたが、実際には、その構成をSerilogに渡していません。最も単純なレベルでは、これには Serilog.Settings.Configuration nugetパッケージをインストールする必要があります。それが終わったら、次のようにReadFrom.Configurationへの呼び出しを追加できます。

var logger = new LoggerConfiguration()
    .ReadFrom.Configuration(Configuration.GetSection("Logging"))
    .Enrich.FromLogContext()
    // ...

構成をSerilogに取り込むために必要なのはこれだけです。ただし、ILoggerFactory内でConfigureを使用している方法には他の問題があります( これはASP.NETで変更されましたコア2. )。これが原因である可能性が高い問題の1つは、ASP.NET CoreのコンソールプロバイダーとSerilogコンソールシンクの両方がログを書き込むことです。そのいずれかでヘルプが必要な場合は、オンラインで十分に文書化されていますが、絶対に必要な場合は追加のStack Overflow質問を作成できます。

Nicholas Blumhardt blogged ASP.NET Core 2.0のロギングの変更について-これは、Serilog + ASP.NET Coreのエクスペリエンスを大幅に簡素化するのに役立つ有用な資料です。

18
Kirk Larkin

Serilogon。NET Core 2.1APIプロジェクト、私は この記事 が非常に便利だとわかりました。

構成ファイルについては、Serilog GitHubリポジトリに Serilog.Settings.Configuration パッケージに関する特定のページがあります。

5
Cheshire Cat