如何为ILoggerBuilder而不是ILoggerFactory使用扩展方法?

时间:2019-03-15 20:05:16

标签: c# .net-core

我已经读过this,但它是针对asp.net核心的。我下面的代码用于非网络控制台应用程序。 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使用扩展方法ILoggingBuilder而不是ILoggerFactory

2 个答案:

答案 0 :(得分:1)

您应该像下面这样在CreateDefaultBuilder()上调用WebHost方法。有关更多信息,请参见此https://docs.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

的漂亮示例

答案 1 :(得分:1)

最短的是

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