Как мне интерпретировать конфигурацию Serilog в ASP.NET Core 2.1?
Почему-то мне очень трудно понять, что происходит с конфигурацией Serilog. У меня есть веб-API с .NET Core 2.1 и установленным 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,0771 мс.
MyApp> [14:27:54 INF] Выполнение HttpStatusCodeResult, установка кода состояния HTTP 200
MyApp> [14:27:54 INF] Выполненное действие MyApp.Controllers.LoggerController.Post(MyApp) в 2.0855ms
и так далее. Почему я вижу их, так как у меня минимальная ошибка уровня?
Ответы
Ответ 1
Хотя вы добавили конфигурацию в appsettings.json
для переопределения уровней регистрации Serilog, вы фактически не передали указанную конфигурацию в Serilog. На самом простом уровне это требует установки пакета Serilog.Settings.Configuration nuget. Как только вы это сделаете, вы можете добавить вызов ReadFrom.Configuration
, например:
var logger = new LoggerConfiguration()
.ReadFrom.Configuration(Configuration.GetSection("Logging"))
.Enrich.FromLogContext()
// ...
Это все, что вам нужно, чтобы получить конфигурацию в Serilog, но у вас есть другие проблемы с тем, как вы все еще используете ILoggerFactory
внутри Configure
(это изменилось в ASP.NET Core 2.0). Одной из проблем, которые могут возникнуть для вас, является то, что как поставщик ASP.NET Core Console, так и приемник Serilog Console записывают журналы. Если вам нужна помощь с любым из них, она хорошо документирована в Интернете, но, конечно, вы можете создать дополнительные вопросы о переполнении стека, если это абсолютно необходимо.
Nicholas Blumhardt сообщил о изменениях ведения журнала ASP.NET Core 2.0 - это полезное чтение, которое должно помочь значительно упростить ваш опыт Serilog + ASP.NET Core.
Ответ 2
Что касается установки, настройки и использования Serilog в проекте API .NET Core 2.1, я нашел эту статью очень полезной.
Что касается файла конфигурации, в репозитории Serilog GitHub есть специальная страница о пакете Serilog.Settings.Configuration.