2017-09-13 2 views
4

J'ai un projet de test simple pour expérimenter avec la journalisation avec NetCore 2.0 en utilisant le package Microsoft Logging Extensions.netcore ne pas se connecter à la console

Le problème que j'ai est que lorsque je lance mon application la toute première fois, il enregistre les messages d'information comme prévu. Le comportement bizarre que j'ai est cependant que les exécutions suivantes ne produiront aucun message du tout.

Mon projet vise le cadre Net Core 2.0, et a les paquets NuGet suivants installés:

  • Microsoft.Extensions.Logging
  • Microsoft.Extensions.Logging.Abstractions
  • Microsoft.Extensions.Logging .console
  • Microsoft.Extensions.Logging.Debug

Ci-dessous mon exemple de code que je suis essayer de faire fonctionner la journalisation avec:

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."); 
      //} 
     } 
    } 
} 

Je ne reçois aucune sortie dans la fenêtre de la console lorsque je lance ce qui précède. Des idées qui viennent à l'esprit sur ce qui pourrait se passer?

choses que j'ai essayé:

  • Ajouté le Microsoft.Extensions.Logging.Abstractions package, comme je me souviens vaguement avoir besoin de le faire dans NETCORE 1.0 des applications dans le passé.
  • Désinstallé/réinstallé les paquetages ci-dessus.
  • J'ai même essayé d'exécuter l'application à partir de la ligne de commande via la commande dotnet.exe, mais en vain.
  • Si je rétrogradez NetCore Framework 1.1 (et les packages NuGet vers les versions 1.1), les choses fonctionnent comme prévu.

Edit: Je obtenu les journaux montrant maintenant dans la fenêtre de la console si j'ajoute le fournisseur d'enregistrement de débogage dans le mélange.

Dans une application NetCore 1.x, il suffisait d'ajouter le fournisseur de la console.

Édition 2: Il s'avère que le fournisseur de consignation de console ne vide pas immédiatement les messages sur la console comme dans les versions de net-core-1.x. Il semble fonctionner sur un fil différent. Voir cette page Web pour information: https://github.com/aspnet/Logging/issues/631

Répondre

2

@ ajawad987, vous avez raison. Le Dispose() fonctionne.

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