C#中如何登录到控制台
How to log to console in c#
我想使用 Microsoft.Extensions.Logging 将内容记录到控制台。我是这样设置的:
static void Main()
{
ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
ILogger logger = loggerFactory.CreateLogger<Program>();
logger.LogInformation("Current directory {0}", Directory.GetCurrentDirectory());
}
但是,没有任何内容写入控制台。
问题是 ConsoleLoggerProvider
被 AddConsole
添加到 loggerFactory
,是 IDisposable
并且必须被处理掉,以便刷新输出。处理 loggerFactory
将实现这一点。因此,要么在程序末尾调用 loggerFactory.Dispose()
,要么在创建 loggerFactory 时添加 using
,如下所示:
static void Main()
{
using ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
ILogger logger = loggerFactory.CreateLogger<Program>();
logger.LogInformation("Current directory {0}", Directory.GetCurrentDirectory());
}
我认为最简单的方法(不使用 GenericHost)是使用 ServiceCollection
独立的。
public static void Main()
{
var collection = new ServiceCollection();
collection.AddLogging(b => {
b.AddConsole();
b.SetMinimumLevel(LogLevel.Information);
});
var sp = collection.BuildServiceProvider();
using(var scope = sp.CreateScope())
{
var logger = scope.ServiceProvider.GetRequiredService<ILogger<Program>>();
logger.LogInformation("Current directory {0}", Directory.GetCurrentDirectory());
}
}
我想使用 Microsoft.Extensions.Logging 将内容记录到控制台。我是这样设置的:
static void Main()
{
ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
ILogger logger = loggerFactory.CreateLogger<Program>();
logger.LogInformation("Current directory {0}", Directory.GetCurrentDirectory());
}
但是,没有任何内容写入控制台。
问题是 ConsoleLoggerProvider
被 AddConsole
添加到 loggerFactory
,是 IDisposable
并且必须被处理掉,以便刷新输出。处理 loggerFactory
将实现这一点。因此,要么在程序末尾调用 loggerFactory.Dispose()
,要么在创建 loggerFactory 时添加 using
,如下所示:
static void Main()
{
using ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
ILogger logger = loggerFactory.CreateLogger<Program>();
logger.LogInformation("Current directory {0}", Directory.GetCurrentDirectory());
}
我认为最简单的方法(不使用 GenericHost)是使用 ServiceCollection
独立的。
public static void Main()
{
var collection = new ServiceCollection();
collection.AddLogging(b => {
b.AddConsole();
b.SetMinimumLevel(LogLevel.Information);
});
var sp = collection.BuildServiceProvider();
using(var scope = sp.CreateScope())
{
var logger = scope.ServiceProvider.GetRequiredService<ILogger<Program>>();
logger.LogInformation("Current directory {0}", Directory.GetCurrentDirectory());
}
}