2017-09-13 9 views
4

Microsoft 로깅 확장 패키지를 사용하여 NetCore 2.0으로 로깅을 실험하는 간단한 테스트 프로젝트가 있습니다.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 패키지, 나는 막연하게 할 필요가 기억하는 그 NetCore에서 과거에 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(); 
    } 
}