由于某些原因,我很难理解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();
}

我的设置中有一个部分:

"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中都看到很多不必要的信息被记录为:



等等。为什么由于我的最低级别错误而看到这些?

最佳答案

尽管您已将配置添加到appsettings.json中以覆盖Serilog日志记录级别,但实际上尚未将所述配置传递到Serilog中。在最简单的级别,这要求您安装Serilog.Settings.Configuration nuget软件包。完成此操作后,可以添加对ReadFrom.Configuration的调用,如下所示:

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

这是将配置放入Serilog所需的全部,但是在ILoggerFactory(this changed in ASP.NET Core 2.0)内如何仍然使用Configure时,您确实还有其他问题。这可能为您造成的问题之一是ASP.NET Core的控制台提供程序和Serilog控制台接收器都在写日志。如果您需要任何帮助,请在网上进行详细记录,但是如果绝对需要,您当然可以创建其他堆栈溢出问题。

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

关于c# - 如何解释ASP.NET Core 2.1中的Serilog配置?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50679571/

10-13 06:46