2017-09-13 81 views
4

我有一个简单的测试项目,用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

回答

2

@ 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(); 
    } 
}