5

I have an ASP.NET Core 3.0 application. I am getting error as

'Unable to resolve service for type 'Microsoft.Extensions.Logging.ILogger`1[Application.Startup]' while attempting to activate 'Application.Startup'.'

I Know that ILogger is not default registered in ASP.NET Core 3.0 Application. Below is my code for Program.cs and Startup.cs for reference

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureLogging(logging =>
          {
            logging.ClearProviders();
            logging.SetMinimumLevel(LogLevel.Trace);
          })
        .ConfigureWebHostDefaults(webBuilder =>
        {
          webBuilder.UseStartup<Startup>();
        });

Startup.cs

public void ConfigureServices(IServiceCollection services)
    {
        var serviceProvider = services.BuildServiceProvider();
        var logger = serviceProvider.GetService<ILogger<AnyClass>>();
        services.AddSingleton(typeof(ILogger), logger);
        ...
     }

Please can anyone help me with this error, What I am doing wrong in my case ?

PDTech
  • 149
  • 2
  • 5
  • 12

1 Answers1

5

As per https://learn.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-3.1#create-logs-in-the-startup-class writing logs before completion of the DI container setup in the Startup.ConfigureServices method is not supported.

You cannot do var logger = serviceProvider.GetService<ILogger<AnyClass>>(); since the DI container is not configured yet, at that stage.

More information on the link provided.

Mihaimyh
  • 1,262
  • 1
  • 13
  • 35
  • 1
    I tried commenting those lines as well, Still it throws error on Line HostBuilder.Build().Run() when I debug – PDTech Mar 21 '20 at 21:06
  • 1
    You cleared all providers by doing this `logging.ClearProviders();` and did not add any back. Try adding `logging.AddConsole();` and see how it goes. You might need this nuget package https://www.nuget.org/packages/Microsoft.Extensions.Logging.Console for this extension method. – Mihaimyh Mar 21 '20 at 21:16
  • 1
    ILoggingBuilder does not contain definition of AddConsole() Where logging is ILoggingBuilder – PDTech Mar 21 '20 at 21:30
  • 1
    AddConsole() gets available while I added In .ConfigureLogging but still the error exists In this case var logger = serviceProvider.GetService>(); was commented – PDTech Mar 21 '20 at 21:36