Affichage des articles dont le libellé est SeriLog. Afficher tous les articles
Affichage des articles dont le libellé est SeriLog. Afficher tous les articles

Comment faire des Logs dans ASP.NET Core C#

Cela fait cent fois que l'on parle de log nous avons résolut le problème avec Log4Net pendant deux bonnes décennies mais c'est comme tout, les choses changent. Alors aujourd'hui ce qui est le mieux intégré à ASP.NET Core c'est Serilog.

Qu'à cela ne tienne, allons y rapidement, pour faire des Logs dans mon Projet ASP.NET Core avec Serilog le plus simplement du monde.

Il faut installer les packages suivants :

NuGet Packages  pour Serilog avec ASP.NET C#

C'est bon de la noter car maintenant chaque fois que j'instancie un nouveau projet, je me vois obligé de copier ces quelques lignes dans mon nouveau projet tellement c'est simple et efficace.

Dans mon fichier Startup.cs
J'écris le code de la fonction suivante :

private void ConfigureLoggerFactory( ILoggerFactory loggerFactory )
{
    string date = DateTime.Now.ToString();
    date = date.Replace( "/", "" );
    date = date.Replace( " ", "_" );
    date = date.Replace( ":", "-" );
    string logfileName = $"Log/log_{date}.txt";

    var serilog = new LoggerConfiguration()
        .MinimumLevel.Verbose()
        .Enrich.FromLogContext()
        .WriteTo.File( logfileName );


    loggerFactory.WithFilter( new FilterLoggerSettings
     {
         { "IdentityServer4", LogLevel.Debug },
         { "Microsoft", LogLevel.Warning },
         { "System", LogLevel.Warning },
     } ).AddSerilog( serilog.CreateLogger() );
}


Que j'appelle dans la fonction Configure de la façon suivante :

public void Configure( IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory )

ConfigureLoggerFactory( loggerFactory );

Voilà, l'intérêt de faire ainsi, c'est que l'on récupère des logs en provenance des modules System, Microsoft, et IdentityServer4.

N'oubliez pas de consulter :

C#.NET - Serilog Log Not Working

Pour savoir comment configurer les Logs.

CQFD

StackOverflow - SeriLog LogDebug not working

Je lis ce message sur le site Stack Overflow : J'ai une application Web ASP.Net5 avec serilog configuré. Dans mon contrôleur personnel, j'imprime un message d'avertissement, d'erreur, de détail et de débogage, mais sur ma console, seuls les messages d'avertissement, d'erreur et de détail s'affichent.

Alors, comme je ne peux pas répondre là bas, je vais répondre ici ... car la réponse qui est donnée sur le site de StackOverFlow n'est pas la bonne !

ASPNet5 SeriLog LogDebug not working

I have the same issue, Debug Level is after the Verbose Level so it should work.
If Instead of using your own Logger, you direct use the Serilog one :
Serilog.Log.Verbose( "1. Log Verbose" );
Serilog.Log.Log.Debug( "2. Log Debug" );
It works ! You will see the messages.

My answer :

I think the problem come's more from Serilog Logging system that does not overring  Microsoft.Extensions.Logging.LogDebug
and LogTrace it's the same thing.

Mais au moment de publier ma réponse le site de StackOverflow, il me répond tout bonnement "vous n'avez plus accès à la partie réponses avec ce compte d'utilisateur" ! Bon ...

Solution à LogDebug not working

Il s'agit de gérer le niveau de Trace au sein de votre application. Voici ce qu'il faut faire dans le fichier de configuration (de settings en mode developpement) : Application\appsettings.Development.json

  "Logging": {
    "LogLevel": {
      "Default": "Trace",
      "System": "Information",
      "Microsoft": "Information"
    },
    "Console": {
      "IncludeScopes": true
    }
  },

  "Serilog": {
    "Using": [ "Serilog.Sinks.RollingFile" ],
    "MinimumLevel": {
      "Default": "Verbose",
      "Override": {
        "System": "Warning",
        "Microsoft": "Warning"
      }
    }
  },


Et dans mon fichier de settings par défaut voici le contenu de Application\appsettings.json

  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },

  "Serilog": {
    "Using": [ "Serilog.Sinks.RollingFile" ],
    "MinimumLevel": {
      "Default": "Warning",
      "Override": {
        "Microsoft.EntityFrameworkCore.Database.Command": "Error",
        "System": "Error",
        "Microsoft": "Warning",
      }
    },


Voilà et maintenant ça fonctionne "je vois" mes LogDebug.

PS : Si je ne vais pas directement dans StackOverflow écrire cette réponse c'est parce que leur système est un peu... comment dire... pourri et je n'accède plus aux réponses car j'ai donné une réponse par le passé qui n'a pas été notée ! Grrrr.