'ILoggerFactory' не содержит определения для 'AddConsole'

private ILoggerFactory ConfigureLogging(ILoggerFactory factory)
{
      factory.AddConsole();
      return factory;
}

Я нашел приведенный выше фрагмент кода на Github . Выдает следующую ошибку:

'ILoggerFactory' не содержит определения для 'AddConsole', а для перегрузки лучшего метода расширения 'ConsoleLoggerExtensions.AddConsole (ILoggingBuilder)' требуется получатель типа 'ILoggingBuilder'

Я использую NET Core 3.0, и у меня установлены следующие пакеты NuGet.

<PackageReference Include="Discord.Net" Version="2.1.1" />
<PackageReference Include="Discord.Net.Commands" Version="2.1.1" />
<PackageReference Include="Discord.Net.WebSocket" Version="2.1.1" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="3.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="3.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="3.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="3.0.0" />
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="3.0.0" />

Почему я понимаю, что ILoggerFactory не имеет метода AddConsole()? Как я могу это исправить?


person Drago    schedule 06.10.2019    source источник
comment
Возможный дубликат Как исправить устаревшие методы ILoggerFactory?   -  person golobitch    schedule 06.10.2019
comment
Мой вопрос может быть глупым, но проверяли ли вы, что определение метода AddConsole включено в то, что вы объявили с помощью операторов using?   -  person Romain Reboulleau    schedule 06.10.2019


Ответы (9)


Я только что столкнулся с этим после курса по Pluralsight. Я забегал вперед, прежде чем следующий слайд объяснил, почему их .AddConsole работает в ILoggerFactory.Create.

Несмотря на то, что вам нужен только using Microsoft.Extensions.Logging в вашем классе, вам необходимо явно добавить ссылку на пакет в ваше приложение .Net Core, чтобы можно было найти метод .AddConsole.

dotnet add package Microsoft.Extensions.Logging.Console

и добавьте этот оператор using в свой код

using Microsoft.Extensions.Logging;
person crumdev    schedule 18.01.2020

Попробуйте использовать ServiceCollection для настройки ведения журнала в ядре 3.0

private IServiceCollection ConfigureLogging(IServiceCollection factory)
{
      factory.AddLogging(opt =>
                         {
                               opt.AddConsole();
                         })
      return factory;
}
person William Magno    schedule 05.12.2019

Возникает отдельная проблема: ранее подпись для AddConsole () ожидала ILoggerFactory, которая с тех пор изменилась на ILoggerBuilder, как указано в сообщении об ошибке.

Похоже, что это новый способ установить новый консольный регистратор:

var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());

person Brendan Grant    schedule 22.06.2020
comment
Это сработало для меня, используя dotnet 5 - person Johan van Breda; 12.02.2021

В .NET Core 3.0 добавление консольного ведения журнала отличается. Вы должны использовать LoggerFactory.Create (), чтобы добавить это. посмотрите microsoft документы здесь

person CLoc    schedule 06.10.2019
comment
Это не работает, даже если пример, предоставленный MS, не работает - person Charles Okwuagwu; 16.11.2019
comment
вы получаете сообщение об ошибке в примере или что у вас не работает? Некоторая информация была бы неплохой, поэтому мы можем помочь вам вместо того, чтобы напрямую распространять отрицательные голоса - person CLoc; 26.11.2019
comment
В примере из документов Microsoft, которые вы цитируете напрямую, AddConsole () будет отображаться как не найденный. - person Charles Okwuagwu; 26.11.2019
comment
Если вы получаете AddConsole() not found, как указано выше, добавьте ссылку на Microsoft.Extensions.Logging.Console в свой csproj, и он будет работать. - person Willem Ellis; 15.10.2020

Если у вас нет доступа к LoggerFactory.Create(), вы все равно можете использовать ILoggerFactory с AddProvider (), придавая ему ConsoleLoggerProvider (), но если вы хотите сделать что-то простое, это немного неудобно. Проблема в том, что ConsoleLoggerProvider() требуется IOptionsMonitorConsoleLoggerOptions ›как параметр и самое простое действие, если вы

  • у вас нет доступа к механизму опций в базе кода (моя проблема), или
  • реальные механизмы опций в вашей существующей базе кода не совпадают с IOptionsMonitor<>, или
  • у вас есть другие причины не использовать возможности параметров ASP.Net

заключается в создании фиктивного класса:

using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Console;
using Microsoft.Extensions.Options;
    
    class DummyConsoleLoggerOptionsMonitor : IOptionsMonitor<ConsoleLoggerOptions>
    {
        private readonly ConsoleLoggerOptions option = new ConsoleLoggerOptions();

        public DummyConsoleLoggerOptionsMonitor(LogLevel level)
        {
            option.LogToStandardErrorThreshold = level;
        }

        public ConsoleLoggerOptions Get(string name)
        {
            return this.option;
        }

        public IDisposable OnChange(Action<ConsoleLoggerOptions, string> listener)
        {
            return new DummyDisposable();
        }

        public ConsoleLoggerOptions CurrentValue => this.option;

        private sealed class DummyDisposable : IDisposable
        {
            public void Dispose()
            {
            }
        }
    }

Затем вы можете использовать свой ILoggerFactory как:

factory.AddProvider(
    new ConsoleLoggerProvider(
        new DummyConsoleLoggerOptionsMonitor(LogLevel.Debug)));
person mheyman    schedule 02.10.2020

Я столкнулся с этой ошибкой в ​​сгенерированном коде при работе с платформой Uno с VS2019. Поскольку код был сгенерирован и ошибка возникла только после того, как я обновил свои пакеты Nuget до их последних версий, было легко обнаружить виновника:

Первоначальная версия пакета Microsoft.Extensions.Logging.Console была 1.1.1. Последняя на данный момент версия 5.0.0. Возврат к версии 1.1.1 устранил проблему. Возможно, что любая версия до 5.0.0 также может решить проблему, хотя я не проверял.

Поэтому переход на подходящую версию до 5.0.0 для Microsoft.Extensions.Logging.Console должен решить проблему.

person Chuma    schedule 26.01.2021

У меня была такая же проблема с моим приложением, и мне пришлось добавить

<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.1.0"/>

в мой файл .csproj и восстановить решение. Это устранило проблему в моем случае.

person kateww    schedule 22.06.2020

У меня была та же проблема, но я не смог установить расширение, даже если я добавлю ссылку на пакет в свой .csproj, вместо этого я просто перешел на сайт nuget Microsoft.Extensions.Logging.Console и используйте эту команду в консоли диспетчера пакетов, поскольку пакет dotnet add Microsoft.Extensions.Logging.Console не работает для меня.

Install-Package Microsoft.Extensions.Logging.Console -Version 3.1.5
person Crismogram    schedule 08.07.2020

Если у тебя есть

private static ILoggerFactory LoggerFactory { get; set; }

Вместо

private static LoggerFactory LoggerFactory { get; set; }

Вы получите сообщение об ошибке из-за зависимости от инъекции из предыдущей версии dotnet.

person Rebecca    schedule 05.05.2021