我已经读过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
?
答案 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());