如何解释 ASP.NET 核心 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();
}

我的应用设置有一个部分:

"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"
}
}
}
}

无论我做什么,我都会在控制台和日志中看到许多不需要的信息被记录,例如:

[14:27:54 INF] 执行的操作方法 MyApp.Controllers.LoggerController.Post (MyApp(,在 0.0771 毫秒内返回结果 Microsoft.AspNetCore.Mvc.OkResult。
MyApp> [14:27:54 INF] 正在执行 HttpStatusCodeResult,设置 HTTP 状态代码 200
MyApp> [14:27:54 INF] 在 2.0855ms 内执行操作 MyApp.Controllers.LoggerController.Post (MyApp(

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

尽管您已将配置添加到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 控制台接收器都在写入日志。如果您需要这方面的帮助,它在网上有很好的记录,但当然,如果绝对必要,您可以创建额外的堆栈溢出问题。

Nicholas Blumhardt 在博客中介绍了 Core 2.0 ASP.NET 日志记录更改 - 这是一本有用的读物,应该有助于大大简化您的 Serilog + ASP.NET Core 体验。

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

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

最新更新