netcore未记录到控制台
问题描述:
我有一个简单的测试项目,用NetCore 2.0使用Microsoft Logging Extensions软件包进行记录实验。netcore未记录到控制台
我遇到的问题是,当我第一次运行我的应用程序时,它会按预期记录信息性消息。我遇到的奇怪行为是后续运行不会产生任何消息。
我的项目目标的网络核心2.0框架,并已安装了以下的NuGet包:
- Microsoft.Extensions.Logging
- Microsoft.Extensions.Logging.Abstractions
- Microsoft.Extensions.Logging .Console
- Microsoft.Extensions.Logging.Debug
下面是我的示例代码,我试图让日志工作:
using System;
namespace LoggingNetCore2
{
using Microsoft.Extensions.Logging;
class Program
{
static void Main(string[] args)
{
var loggerFactory = new LoggerFactory();
loggerFactory.AddConsole();
loggerFactory.AddDebug(); // <-- why is this needed for console logging?
var logger = loggerFactory.CreateLogger(typeof(Program));
logger.LogInformation("Hello, World!");
logger.LogTrace("trace");
logger.LogDebug("debug");
logger.LogWarning("warning");
logger.LogCritical("critical");
logger.LogError("errrrr");
//using (logger.BeginScope("MyMessages"))
//{
// logger.LogInformation("Beginning Operation...");
// logger.LogInformation("Doing something cool... please wait.");
// logger.LogInformation("Completed successfully.");
//}
}
}
}
当我运行上述操作时,在控制台窗口上没有输出。任何想到可能会发生什么的想法?
事情我已经尝试:
- 添加了Microsoft.Extensions.Logging.Abstractions包,因为我依稀记得需要做的是在1.0磊科应用了过去。
- 卸载/重新安装上述软件包。
- 我甚至尝试通过dotnet.exe命令从命令行运行应用程序,但无济于事。
- 如果我降级到NetCore框架1.1(和NuGet包到1.1版本),事情按预期工作。
编辑:我现在的日志显示在控制台窗口中,如果我添加了调试日志提供进入组合。
在NetCore 1.x应用程序中,只需添加控制台提供程序就足够了。
编辑#2:事实证明,控制台日志记录提供程序不会像在net-core-1.x版本中那样立即将消息刷新到控制台。它似乎在不同的线程上运行。看到这个网页的信息:https://github.com/aspnet/Logging/issues/631
答
@ ajawad987,你是对的。 Dispose()
的作品。
public class Program
{
public static void Main(string[] args)
{
var services = new ServiceCollection()
.AddLogging(config => config.AddConsole())
.BuildServiceProvider();
services.GetRequiredService<ILogger<Program>>()
.LogCritical("Hello");
((IDisposable) services)?.Dispose();
}
}