如何使用扩展方法为ILoggerBuilder代替ILoggerFactory?

5
我已经阅读了这个链接,但它是针对asp.net core的。我的代码是为一个非Web控制台应用程序编写的。Visual Studio告诉我AddConsole(this ILoggerFactory,...)已过时,必须替换为AddConsole(this ILoggingBuilder,...)
class Program
{
    static void Main(string[] args)
    {

        ILoggerFactory ilf = new LoggerFactory();
        ilf.AddConsole(LogLevel.Information);

        ILogger<Program> logger = ilf.CreateLogger<Program>();

        logger.LogError("the cpu is overheating");

        Console.WriteLine("waiting for logger to print");
    }
}

问题

如何在上述情况下使用扩展方法AddConsole来替代ILoggerFactoryILoggingBuilder

2个回答

2
最短的是:
var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());

1
你应该像下面这样调用WebHost上的CreateDefaultBuilder()方法。查看此链接以获取更多信息https://learn.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-2.2
public static void Main(string[] args)
{
    var host = CreateWebHostBuilder(args).Build();
    var logger = host.Services.GetRequiredService<ILogger<Program>>();
    logger.LogInformation("the cpu is overheating");
}

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .ConfigureLogging(logging =>
        {
            logging.ClearProviders();
            logging.AddConsole();
        });

如果这是一个控制台应用程序,那么你可能只需要说
ILogger<Program> logger = new Logger<Program>(new LoggerFactory());
logger.LogError("System is over heated!!!");

这也不太难,您需要扩展ILoggerProvider并将自定义提供程序传递给日志记录器工厂,例如:

new LoggerFactory().AddProvider(new CustomProvider());

查看此博客文章,其中包含漂亮的示例以进行彩色控制台日志记录https://asp.net-hacker.rocks/2017/05/05/add-custom-logging-in-aspnetcore.html


你的回答是针对asp.net而不是非Web控制台应用程序的。 - Second Person Shooter
它不会在控制台窗口上显示错误消息。 - Second Person Shooter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接