web-dev-qa-db-fra.com

Comment interpréter la configuration de Serilog dans ASP.NET Core 2.1?

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?

15
gong

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.

18
Kirk Larkin

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 .

5
Cheshire Cat