我如何解释 ASP.NET Core 2.1 中的 Serilog 配置?
How do I interpret Serilog configuration in ASP.NET Core 2.1?
出于某种原因,我发现很难理解 Serilog 配置的情况。我有一个带有 .NET Core 2.1 的网络 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 中看到记录了很多不需要的信息,例如:
[14:27:54 INF] Executed action method MyApp.Controllers.LoggerController.Post (MyApp), returned result Microsoft.AspNetCore.Mvc.OkResult in 0.0771ms.
MyApp> [14:27:54 INF] Executing HttpStatusCodeResult, setting HTTP status code 200
MyApp> [14:27:54 INF] Executed action MyApp.Controllers.LoggerController.Post (MyApp) in 2.0855ms
等等。为什么我会看到这些,因为我有最低级别的错误?
尽管您已将配置添加到 appsettings.json
以覆盖 Serilog 日志记录级别,但您实际上并未将所述配置传递到 Serilog。在最简单的级别,这需要您安装 Serilog.Settings.Configuration nuget 包。完成后,您可以添加对 ReadFrom.Configuration
的调用,如下所示:
var logger = new LoggerConfiguration()
.ReadFrom.Configuration(Configuration.GetSection("Logging"))
.Enrich.FromLogContext()
// ...
这就是将配置导入 Serilog 所需的全部内容,但是您在 Configure
中仍然使用 ILoggerFactory
的方式确实存在其他问题(this changed in ASP.NET Core 2.0 ).这可能会给您带来的问题之一是 ASP.NET Core 的控制台提供程序和 Serilog 控制台接收器都在写入日志。如果您需要任何帮助,它在网上有很好的记录,但是如果绝对必要,您当然可以创建其他 Stack Overflow 问题。
Nicholas Blumhardt blogged 关于 ASP.NET Core 2.0 日志更改 - 这是一本有用的读物,应该有助于大大简化您的 Serilog + ASP.NET Core 体验。
查看如何在 .NET Core 2.1 API 项目上安装、配置和使用 Serilog,我发现 this article 很有用。
关于配置文件,在 Serilog GitHub 存储库中有一个关于 Serilog.Settings.Configuration 包的特定页面。
出于某种原因,我发现很难理解 Serilog 配置的情况。我有一个带有 .NET Core 2.1 的网络 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 中看到记录了很多不需要的信息,例如:
[14:27:54 INF] Executed action method MyApp.Controllers.LoggerController.Post (MyApp), returned result Microsoft.AspNetCore.Mvc.OkResult in 0.0771ms.
MyApp> [14:27:54 INF] Executing HttpStatusCodeResult, setting HTTP status code 200
MyApp> [14:27:54 INF] Executed action MyApp.Controllers.LoggerController.Post (MyApp) in 2.0855ms
等等。为什么我会看到这些,因为我有最低级别的错误?
尽管您已将配置添加到 appsettings.json
以覆盖 Serilog 日志记录级别,但您实际上并未将所述配置传递到 Serilog。在最简单的级别,这需要您安装 Serilog.Settings.Configuration nuget 包。完成后,您可以添加对 ReadFrom.Configuration
的调用,如下所示:
var logger = new LoggerConfiguration()
.ReadFrom.Configuration(Configuration.GetSection("Logging"))
.Enrich.FromLogContext()
// ...
这就是将配置导入 Serilog 所需的全部内容,但是您在 Configure
中仍然使用 ILoggerFactory
的方式确实存在其他问题(this changed in ASP.NET Core 2.0 ).这可能会给您带来的问题之一是 ASP.NET Core 的控制台提供程序和 Serilog 控制台接收器都在写入日志。如果您需要任何帮助,它在网上有很好的记录,但是如果绝对必要,您当然可以创建其他 Stack Overflow 问题。
Nicholas Blumhardt blogged 关于 ASP.NET Core 2.0 日志更改 - 这是一本有用的读物,应该有助于大大简化您的 Serilog + ASP.NET Core 体验。
查看如何在 .NET Core 2.1 API 项目上安装、配置和使用 Serilog,我发现 this article 很有用。
关于配置文件,在 Serilog GitHub 存储库中有一个关于 Serilog.Settings.Configuration 包的特定页面。