Dans ASP.NET Core 2.0, nous avons ceci
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
Cette CreateDefaultBuilder(args)
a de nombreuses valeurs par défaut utiles. Cependant, il contient cela :
.ConfigureLogging((context, logging) => {
logging.AddConfiguration(context.Configuration.GetSection("Logging"));
logging.AddConsole(); // HERE IS THE PROBLEM
logging.AddDebug(); // HERE IS THE PROBLEM
})
Ainsi, les fournisseurs de consignation et de consignation de débogage sont toujours enregistrés.
Je les enregistrais comme ça
if (env.IsDevelopment())
{
// register them here
}
Comment puis-je les supprimer/désinscrire lors de l'exécution en mode production? Je ne veux pas dire changer le niveau de journalisation, je veux dire que je ne veux pas du tout qu'ils soient enregistrés en mode production.
Je dirais que la manière conçue de le faire serait de changer la configuration de la journalisation pour ne rien enregistrer sur ces fournisseurs. Mais je comprends que vous souhaitez supprimer tout appel à la production; et vous pouvez toujours le faire correctement dans le code.
Vous pouvez simplement accéder à l'environnement d'hébergement à partir du HostBuilderContext
qui est transmis au ConfigureLogging
lambda:
.ConfigureLogging((context, logging) =>
{
logging.AddConfiguration(context.Configuration.GetSection("Logging"));
if (context.HostingEnvironment.IsDevelopment())
{
logging.AddConsole();
logging.AddDebug();
}
});
Évidemment, cela seul n'aide pas à annuler ce que l'appel CreateDefaultBuilder
a déjà configuré. Tout d'abord, vous devez annuler l'enregistrement de ces fournisseurs. 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é introduit en réponse à ce problème de journalisation sur GitHub .
Je pense que vous ne pouvez pas utiliser le CreateDefaultBuilder alors ou définir les LogLevels sur None peut-être. Selon les documents, vous pouvez l'utiliser.
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 Section https://docs.Microsoft.com/en-us/aspnet/core/fundamentals/logging?tabs=aspnetcore2x
Vous avez trouvé une autre option, ajoutez simplement un filtre de journalisation pour la console dans votre appsettings.json
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
},
"Console": {
"LogLevel": {
"Default": "None"
}
}
},