30 votes

Supprimer de la console et de déboguer des bûcherons ASP.NET Core 2.0 lorsque dans le mode de production

Dans ASP.NET Core 2.0, nous avons ce

public static IWebHost BuildWebHost(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>()
        .Build();

Qu' CreateDefaultBuilder(args) a de nombreux défauts. Cependant, il contient ceci:

.ConfigureLogging((context, logging) => {
    logging.AddConfiguration(context.Configuration.GetSection("Logging"));
    logging.AddConsole();   // HERE IS THE PROBLEM
    logging.AddDebug();     // HERE IS THE PROBLEM
})

Donc la console et l'enregistrement de débogage fournisseurs sont toujours enregistrées.

J'ai utilisé pour vous inscrire comme ceci

if (env.IsDevelopment())
{ 
    // register them here
}

Comment puis-je supprimer/annuler l'inscription d'eux lors de l'exécution en mode de production? Je ne veux pas changer le niveau d'enregistrement, je veux dire je ne veux pas enregistrés dans le mode de production.

44voto

poke Points 64398

Je dirais que la conçu de façon de le faire serait par la modification de la configuration de la journalisation de ne pas se connecter rien à ces fournisseurs. Mais je comprends que vous voulez supprimer tous les appels à la production; et vous pouvez toujours le faire correctement dans le code.

Vous pouvez simplement accéder à l'environnement d'hébergement de l' HostBuilderContext qui est transmis à l' ConfigureLogging lambda:

.ConfigureLogging((context, logging) =>
{
    logging.AddConfiguration(context.Configuration.GetSection("Logging"));

    if (context.HostingEnvironment.IsDevelopment())
    {
        logging.AddConsole();
        logging.AddDebug();
    }
});

Évidemment, cela ne suffit pas à aider à défaire ce que l' CreateDefaultBuilder appel déjà mis en place. Tout d'abord, vous devez annuler l'inscription de ces prestataires. Pour cela, vous pouvez utiliser le nouveau ILoggingBuilder.ClearProviders méthode:

.ConfigureLogging((context, logging) =>
{
    // clear all previously registered providers
    logging.ClearProviders();

    // now register everything you *really* want
    // …
});

Cela a été introduite en réponse à cette journalisation question sur GitHub.

3voto

Lee Reitz Points 40

Je pense que vous ne pouvez pas utiliser le CreateDefaultBuilder ou alors définir les Niveaux d'Aucun peut-être. Selon les documents, vous pouvez utiliser ce.

public static void Main(string[] args)
{
var webHost = new WebHostBuilder()
    .UseKestrel()
    .UseContentRoot(Directory.GetCurrentDirectory())
    .ConfigureAppConfiguration((hostingContext, config) =>
    {
        var env = hostingContext.HostingEnvironment;
        config.AddJsonFile("appsettings.json", optional: true, 
reloadOnChange: true)
              .AddJsonFile($"appsettings.{env.EnvironmentName}.json", 
optional: true, reloadOnChange: true);
        config.AddEnvironmentVariables();
    })
    .ConfigureLogging((hostingContext, logging) =>
    {


logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
        logging.AddConsole();
        logging.AddDebug();
    })
    .UseStartup<Startup>()
    .Build();

webHost.Run();
}

Comment Ajouter des fournisseurs de la Section https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging?tabs=aspnetcore2x

Trouvé une autre option, il suffit d'ajouter un enregistrement à Filtre pour Console dans votre appsettings.json

  "Logging": {
"IncludeScopes": false,
"LogLevel": {
  "Default": "Debug",
  "System": "Information",
  "Microsoft": "Information"
},
"Console": {
  "LogLevel": {
    "Default": "None"
  }
}

},

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X