web-dev-qa-db-fra.com

Comment réparer les méthodes ILoggerFactory obsolètes?

J'ai mis à niveau mon projet vers .NET Core 2.2.x et un avertissement obsolète concernant le code suivant - les deux lignes:

public void Configure(IApplicationBuilder app, 
                      IHostingEnvironment env, 
                      ILoggerFactory loggerFactory) 
  {
    loggerFactory.AddConsole(Configuration.GetSection("Logging"));

La suggestion à résoudre est The recommended alternative is AddConsole(this ILoggingBuilder builder). Je pensais que c'est ce que j'utilise.

Qu'est-ce que j'oublie ici?

29
AngryHacker

J'ai eu le même problème aujourd'hui.

Supprimez votre configuration de journalisation de Startup.cs, accédez à votre fichier Program.cs et ajoutez un élément tel que:

            var Host = new WebHostBuilder()
                .UseKestrel()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .UseStartup<Startup>()
                .ConfigureLogging((hostingContext, logging) =>
                {
                    logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
                    logging.AddConsole();
                    logging.AddDebug();
                })
                .Build();

Ceci utilisait le 'constructeur' car la variable 'logging' est un IloggingBuilder (alors que votre code utilise toujours ILoggerFactory)

UPDATE: L'autre méthode que je viens d'essayer est de rester dans Startup.cs, mais déplacez les tâches de journalisation de la méthode 'Configure' vers 'ConfigureServices' comme ceci:

        public void ConfigureServices(IServiceCollection services)
    {

        services.AddLogging(loggingBuilder =>
        {
            loggingBuilder.AddConfiguration(Configuration.GetSection("Logging"));
            loggingBuilder.AddConsole();
            loggingBuilder.AddDebug();
        });

    }

Peut-être que le programme.cs reste moins pollué ...

63
Michael Ceber

La recommandation de la documentation d'utiliser AddConsole(this ILoggingBuilder builder) est correcte, mais pour que cela fonctionne, vous devez ajouter une référence au paquet NuGet Microsoft.Extensions.Logging.Console.

5
x5657

Selon le problème ouvert sur GitHub à cet effet, les méthodes de remplacement sont déjà appelées si vous utilisez la méthode CreateDefaultBuilder () dans vos Program.cs.

https://github.com/aspnet/Docs/issues/9829

Le seul problème que j'ai, c'est que je ne les ai activés que pour les environnements autres que ceux de production… et que je ne vois pas comment y parvenir.

3
tommytarheel

Ne vous inquiétez pas pour ça - c'est le la chose la plus stupide jamais !

Remarque

L'exemple de code suivant utilise un constructeur ConsoleLoggerProvider obsolète dans la version 2.2. Des remplacements appropriés pour les API de journalisation obsolètes seront disponibles dans la version 3.0. En attendant, il est prudent d’ignorer et de supprimer les avertissements.

Au cas où vous pensiez avoir oublié ce que Obsolète voulait dire - vous ne l'avez pas fait! Ne vous inquiétez pas pour cela et ignorez-le pour l'instant - ou supprimez l'avertissement (désolé, je n'ai pas le code pour cela).

(J'aimerais qu'ils expliquent mieux pourquoi cela a été fait - c'est ce que je veux dire par stupide.)

3
Simon_Weaver