Как исправить устаревшие методы 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)
. Я думал, что это то, что я использую.
Что мне здесь не хватает?
Ответы
Ответ 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. В то же время безопасно игнорировать и подавлять предупреждения.
В случае, если вы думали, что забыли, что имел в виду " Устаревший", вы этого не сделали! Не беспокойтесь об этом и просто проигнорируйте это сейчас - или отключите предупреждение (извините, у меня нет кода для этого под рукой).
(Хотелось бы, чтобы они лучше объяснили, почему это было сделано - то, что я подразумеваю под глупостью.)