我正在构建.Net Core 3.1控制台应用程序,并且要在控制台日志记录中使用该构建。关于.net日志的文章不计其数,但我一直找不到能够在控制台中实际编写的示例。
namespace test
{
class Program
{
static void Main(string[] args)
{
var serviceProvider = new ServiceCollection()
.AddLogging(config => config.ClearProviders().AddConsole().SetMinimumLevel(LogLevel.Trace))
.BuildServiceProvider();
//configure console logging
serviceProvider
.GetService<ILoggerFactory>();
var logger = serviceProvider.GetService<ILoggerFactory>()
.CreateLogger<Program>();
logger.LogDebug("All done!");
Console.Write("Yup");
}
}
它编译并运行,甚至将“ Yup”写入控制台,但“一切完成!” 没有显示。在控制台窗口中输出:
我想念什么?
这是服务的一种处理方式:杰里米·莱克曼(Jeremy Lakeman)感谢你修复:
static void Main(string[] args)
{
using (var serviceProvider = new ServiceCollection()
.AddLogging(config => config.ClearProviders().AddConsole().SetMinimumLevel(LogLevel.Trace))
.BuildServiceProvider())
{
//configure console logging
serviceProvider
.GetService<ILoggerFactory>();
var logger = serviceProvider.GetService<ILoggerFactory>()
.CreateLogger<Program>();
// run app logic
logger.LogDebug("All done!");
}
Console.Write("Yup");
}
为了使日志记录不会对程序的性能产生不利影响,它可以异步编写。
处置日志提供程序和其他日志记录类应导致刷新日志。
服务提供者在处置服务时也应处置所有服务。