Как исправить устаревшие методы ILoggerFactory? - программирование

Как исправить устаревшие методы ILoggerFactory?

Я обновил свой проект до .NET Core 2.2.x и получил устаревшее предупреждение относительно следующего кода - обе строки:

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

The recommended alternative is AddConsole(this ILoggingBuilder builder) исправить это The recommended alternative is AddConsole(this ILoggingBuilder builder). Я думал, что это то, что я использую.

Что мне здесь не хватает?

4b9b3361

Ответ 1

У меня была такая же проблема сегодня.

Удалите конфигурацию регистрации из Startup.cs и перейдите в файл Program.cs и добавьте что-то вроде:

            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();

При этом использовался 'builder', потому что переменная 'logging' является IloggingBuilder (тогда как ваш код все еще использует ILoggerFactory)

ОБНОВЛЕНИЕ: Другой метод, который я только что попробовал, состоит в том, чтобы остаться в Startup.cs, но переместить материал регистрации из метода 'Configure' в 'ConfigureServices' следующим образом:

        public void ConfigureServices(IServiceCollection services)
    {

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

    }

Возможно, сохраняет Program.cs менее загрязненным...

Ответ 2

Рекомендация по документации для использования AddConsole(this ILoggingBuilder builder) верна, но для этого вам нужно добавить ссылку на пакет NuGet Microsoft.Extensions.Logging.Console.

Ответ 3

В соответствии с проблемой, открытой для этого на GitHub, методы замены уже вызываются, если вы используете метод CreateDefaultBuilder() в вашем Program.cs.

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

Единственная проблема, с которой я столкнулся, это то, что я включил их только для непродакшен среды... и не вижу способа сделать это в будущем.

Ответ 4

Не беспокойтесь об этом - это самая глупая вещь в истории !

Заметка

В следующем примере кода используется конструктор ConsoleLoggerProvider, который был устаревшим в версии 2.2. Надлежащие замены для устаревших интерфейсов API будут доступны в версии 3.0. В то же время безопасно игнорировать и подавлять предупреждения.

В случае, если вы думали, что забыли, что имел в виду " Устаревший", вы этого не сделали! Не беспокойтесь об этом и просто проигнорируйте это сейчас - или отключите предупреждение (извините, у меня нет кода для этого под рукой).

(Хотелось бы, чтобы они лучше объяснили, почему это было сделано - то, что я подразумеваю под глупостью.)