2017-09-13 15 views
4

Microsoft Logging Extensionsパッケージを使用してNetCore 2.0でロギングを試す簡単なテストプロジェクトがあります。netcoreはコンソールにログしない

私が抱えている問題は、初めてアプリを実行するときに、情報メッセージを期待通りに記録することです。私が持っている奇妙な振る舞いは、その後の実行では全くメッセージが生成されないということです。

私のプロジェクトはネットコア2.0フレームワークを対象とし、次のNuGetパッケージがインストールされています:

  • Microsoft.Extensions.Logging.Abstractions
  • Microsoft.Extensions.Loggingを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."); 
          //} 
         } 
        } 
    } 
    

    上記を実行すると、コンソールウィンドウに出力が表示されません。何が起こっている可能性があるのか​​気になるアイデア?私が試した

    もの:私は漠然と過去にNetCoreで1.0アプリのことを行うために必要が覚えているよう

    • は、Microsoft.Extensions.Logging.Abstractionsパッケージを追加しました。
    • 上記のパッケージをアンインストール/再インストールしました。
    • 私は、コマンドラインからdotnet.exeコマンドを使ってアプリを実行しようとしましたが、役に立たなくなってしまいました。
    • NetCoreフレームワーク1.1(およびNuGetパッケージを1.1バージョン)にダウングレードすると、正常に機能します。

    編集:私はミックスにデバッグログプロバイダーを追加した場合、私は、コンソールウィンドウになりまし示すログを得ました。

    NetCore 1.xアプリでは、単にコンソールプロバイダを追加するだけで十分でした。

    編集#2:コンソールロギングプロバイダは、net-core-1.xバージョンと同じように、コンソールにメッセージをすぐにフラッシュしません。それは別のスレッドで実行されるように見えます。情報についてはこのWebページをご覧ください: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(); 
        } 
    } 
    
    関連する問題