我正在构建一个 .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”,但是“All done!”未显示。
控制台窗口中的输出:
这是我的示例项目结构:
我错过了什么?
这是对服务的处理:感谢 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");
}
最佳答案
为了使日志记录不会对程序的性能产生不利影响,它可以异步编写。
处理日志提供程序和其他日志记录类应该会导致日志刷新。
服务提供者还应在处置所有服务时对其进行处置。
关于c# - 如何使 .net core 3.1 控制台应用程序中的控制台记录器工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62454301/