如何解释ASP.NET Core 2.1中的Serilog配置?

时间:2018-06-04 11:29:38

标签: c# asp.net-core 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]执行动作MyApp.Controllers.LoggerController.Post(MyApp)2.0855ms

等等。为什么我会看到那些因为我有最小级别错误?

2 个答案:

答案 0 :(得分:18)

虽然您已将配置添加到appsettings.json以覆盖Serilog日志记录级别,但您实际上并未将所述配置传递给Serilog。在最简单的级别,这需要您安装Serilog.Settings.Configuration nuget包。完成后,您可以添加对ReadFrom.Configuration的调用,如下所示:

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

这就是为了让您的配置进入Serilog所需的一切,但是您在ILoggerFactoryConfigure仍然存在其他问题{{1}}。this changed in ASP.NET Core 2.0 )。这可能对您造成的一个问题是,ASP.NET Core的Console提供程序和Serilog Console接收器都在编写日志。如果您需要任何帮助,可以在网上详细记录,但当然,如果绝对必要,您可以创建额外的Stack Overflow问题。

Nicholas Blumhardt blogged关于ASP.NET Core 2.0日志记录更改 - 这是一个有用的阅读,应该有助于大大简化您的Serilog + ASP.NET Core体验。

答案 1 :(得分:5)

.NET Core 2.1 API项目上,如何安装,配置和使用 Serilog ,我发现this article非常有用。

关于配置文件,在Serilog GitHub存储库上,有一个有关Serilog.Settings.Configuration软件包的特定页面。