Pour une raison quelconque, je trouve très difficile de comprendre ce qui se passe avec la configuration de Serilog. J'ai une API Web avec .NET Core 2.1 et installé serilog.sink.logstash
. Ma startup a:
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();
}
Mon appsettings a une section:
"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"
}
}
}
}
Peu importe ce que je fais, je vois à la fois dans la console et dans logstash que beaucoup d’informations indésirables sont consignées, comme:
[14:27:54 INF] La méthode d'action exécutée MyApp.Controllers.LoggerController.Post (MyApp), a renvoyé le résultat Microsoft.AspNetCore.Mvc.OkResult à 0.0771ms.
MyApp> [14:27:54 INF] Exécution de HttpStatusCodeResult, définition du code d'état HTTP 200
MyApp> [14:27:54 INF] Action exécutée MyApp.Controllers.LoggerController.Post (MyApp) en 2.0855ms
etc. Pourquoi est-ce que je les vois depuis que j'ai un niveau d'erreur minimum?
Bien que vous ayez ajouté la configuration à appsettings.json
pour avoir ignoré les niveaux de journalisation Serilog, vous n’avez pas réellement transmis ladite configuration à Serilog. Au niveau le plus simple, cela nécessite l'installation du package Serilog.Settings.Configuration . Une fois que vous avez fait cela, vous pouvez ajouter un appel à ReadFrom.Configuration
, ainsi:
var logger = new LoggerConfiguration()
.ReadFrom.Configuration(Configuration.GetSection("Logging"))
.Enrich.FromLogContext()
// ...
C’est tout ce dont vous avez besoin pour importer votre configuration dans Serilog, mais vous avez d’autres problèmes avec la façon dont vous utilisez toujours ILoggerFactory
à l’intérieur de Configure
( cela a changé en ASP). .NET Core 2. ). L'un des problèmes que cela est probablement à l'origine du problème réside dans le fait que le fournisseur de console ASP.NET Core et le récepteur de console Serilog écrivent des journaux. Si vous avez besoin d’aide à ce sujet, c’est bien documenté en ligne, mais vous pouvez bien sûr créer des questions supplémentaires sur le dépassement de pile si cela est absolument nécessaire.
Nicholas Blumhardt blogué à propos des modifications de la journalisation ASP.NET Core 2.0 - C’est une lecture utile qui devrait vous aider à simplifier considérablement votre expérience Serilog + ASP.NET Core.
Vous cherchez comment installer, configurer et utiliser Serilog sur .NET Core 2.1 Projet API, j'ai trouvé cet article très utile.
À propos du fichier de configuration, dans le référentiel Serilog GitHub, il existe une page spécifique sur le package Serilog.Settings.Configuration .