【发布时间】:2020-06-18 16:02:24
【问题描述】:
我正在构建一个 .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");
}
}
它编译并运行,甚至将“是的”写入控制台,但“全部完成!”未显示。 控制台窗口输出:
我错过了什么?
这是对服务的处置:感谢 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");
}
【问题讨论】:
-
无法重现问题,它会写入文本
"Yup"并生成日志条目“全部完成!”。 -
@Progman 感谢您的宝贵时间。我已经更新了这个问题,以便提供我的完整解决方案,如果你的工作有效,也许我们可以比较笔记。我是否需要添加其他配置或其他内容
-
IServiceProvider的实现应该是IDisposable。 -
@JeremyLakeman 如果您添加一个简短的答案,我可以为您的解决方案提供适当的分数
标签: c# .net-core console-application