How to fix obsolete ILoggerFactory methods?

34,660

Solution 1

I had the same issue today.

Remove your logging configuration from Startup.cs and go to your Program.cs file and add something like:

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

This used the 'builder' because the variable 'logging' is an IloggingBuilder (whereas your code is still using ILoggerFactory)

UPDATE: The other method I just tried is to stay inside Startup.cs but move the logging stuff from the 'Configure' method to 'ConfigureServices' like this:

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

Perhaps keeps the Program.cs less polluted...

Solution 2

The documentation's recommendation to use AddConsole(this ILoggingBuilder builder) is correct, but for that to work you need to add a reference to the NuGet package Microsoft.Extensions.Logging.Console.

Solution 3

I got the same warning when I was updating logging code from .Net Core 2.1 to 3.0. The recommended way to do the upgrade is documented on MSDN.

In my case, I was trying to get an instance of LoggerFactory for console which is pretty straightforward in .Net Core 3.0:

using (var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole()))
{
    // use loggerFactory
}

Solution 4

Don't worry about it - this is the dumbest thing ever!

Note

The following code sample uses a ConsoleLoggerProvider constructor that has been obsoleted in version 2.2. Proper replacements for obsolete logging APIs will be available in version 3.0. In the meantime, it is safe to ignore and suppress the warnings.

In case you thought you forgot what Obsolete meant - you hadn't! Don't worry about it and just ignore it for now - or suppress the warning (sorry I don't have the code for that to hand).

(Wish they'd put a better explanation for why this was done - that's what I mean by dumb.)

Solution 5

According to the issue opened on GitHub for this, the replacement methods are already being called if you use CreateDefaultBuilder() method in your Program.cs.

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

The only issue I have is that I only turned these on for non-Production environments.. and don't see a way to do so going forward.

Share:
34,660
AngryHacker
Author by

AngryHacker

Updated on July 05, 2022

Comments

  • AngryHacker
    AngryHacker almost 2 years

    I upgraded my project to .NET Core 2.2.x and got an obsolete warning regarding the following code - both lines:

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

    The suggestion to fix is The recommended alternative is AddConsole(this ILoggingBuilder builder). I thought that is what I am using.

    What am I missing here?

  • aruno
    aruno over 4 years
    Not sure the new answer for this since 3.0 is now out - so if you're using 3.0 then this answer itself is now obsolete ;-)
  • d_f
    d_f about 4 years
    The best answer as it's not tight to ASP.NET Core DI infrastructure. The accepted one leaves the full framework outside the scope.
  • Ish Thomas
    Ish Thomas almost 4 years
    Is this even necessary (I mean AddLogging)?? I just created new Web API project, didn't do anything of this. I simply inject ILogger<MyClass> logger via the parameter and can log without a problem (in the Console obviously). So I'm wondering... why AddConsole?
  • Ran Sagy
    Ran Sagy almost 4 years
    Exactly. I had to update my logging extension nuget for another dependency resolution and suddenly it breaks and leaves me thinking "where did you move it this time". This answers it succinctly.
  • jeancallisti
    jeancallisti over 2 years
    How do you do the ConfigureServices method when you're trying to configure the logging of a Class Library from the actual program?
  • Alex78191
    Alex78191 over 2 years
    it doesn't work in .NET 5. Where is no method AddConsole in ILoggerFactory.