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

15

由于某种原因,我发现很难理解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)

等等。 我已经将日志级别设置为最低错误级别,为什么还会看到这些信息?

2个回答

19
虽然您已经在appsettings.json中添加了配置文件以覆盖Serilog的日志级别,但实际上您并没有将该配置传递给Serilog。简单来说,这需要您安装Serilog.Settings.Configuration nuget包。安装完成后,您可以像下面这样添加一个ReadFrom.Configuration调用:
var logger = new LoggerConfiguration()
    .ReadFrom.Configuration(Configuration.GetSection("Logging"))
    .Enrich.FromLogContext()
    // ...

这就是将配置引入Serilog所需的全部步骤,但您在Configure方法中仍然使用ILoggerFactory会带来其他问题(这在ASP.NET Core 2.0中有所改变)。其中一个问题可能会导致的结果是,既有ASP.NET Core控制台提供程序,又有Serilog控制台接收器记录日志。如果需要任何帮助,可以在网上找到很好的文档,当然,如果绝对必要,您也可以创建额外的Stack Overflow问题。

Nicholas Blumhardt 博客介绍了ASP.NET Core 2.0日志更改 - 这是一篇非常有用的阅读材料,应该会极大地简化您的Serilog + ASP.NET Core体验。


5

我在寻找如何在.NET Core 2.1 API项目上安装、配置和使用Serilog,发现这篇文章非常有用。

关于配置文件,在Serilog GitHub仓库中有一个关于Serilog.Settings.Configuration包的专门页面。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接