2017-09-13 125 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(); 
    } 
}