c# - studio - Elimine los registradores de consola y depuración en ASP.NET Core 2.0 cuando esté en modo de producción
netcore 2.2 sdk (2)
Creo que no puedes usar CreateDefaultBuilder entonces o establecer LogLevels en None tal vez. De acuerdo a los documentos puedes usar esto.
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();
}
Cómo agregar la sección de proveedores https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging?tabs=aspnetcore2x
Encontró otra opción, solo agregue un filtro de registro para la consola en su appsettings.json
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
},
"Console": {
"LogLevel": {
"Default": "None"
}
}
}
En ASP.NET Core 2.0 tenemos esto
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
Ese CreateDefaultBuilder(args)
tiene muchos valores predeterminados útiles. Sin embargo contiene esto :
.ConfigureLogging((context, logging) => {
logging.AddConfiguration(context.Configuration.GetSection("Logging"));
logging.AddConsole(); // HERE IS THE PROBLEM
logging.AddDebug(); // HERE IS THE PROBLEM
})
Así que la consola y los proveedores de registro de depuración siempre están registrados.
Solía registrarlos así.
if (env.IsDevelopment())
{
// register them here
}
¿Cómo los elimino / elimino del registro cuando se ejecuta en modo de producción? No me refiero a cambiar el nivel de registro, quiero decir que no quiero que se registren en modo de producción.
Diría que la forma diseñada de hacerlo sería cambiando la configuración de registro para no registrar nada en esos proveedores. Pero entiendo que desea eliminar cualquier convocatoria de producción; y todavía puede hacer esto correctamente en el código.
Simplemente puede acceder al entorno de alojamiento desde el HostBuilderContext
que se pasa a la lambda ConfigureLogging
:
.ConfigureLogging((context, logging) =>
{
logging.AddConfiguration(context.Configuration.GetSection("Logging"));
if (context.HostingEnvironment.IsDevelopment())
{
logging.AddConsole();
logging.AddDebug();
}
});
Obviamente, esto solo no ayuda a deshacer lo que la llamada CreateDefaultBuilder
ya ha configurado. En primer lugar, deberá anular el registro de esos proveedores. Para eso, puedes usar el nuevo método ILoggingBuilder.ClearProviders
:
.ConfigureLogging((context, logging) =>
{
// clear all previously registered providers
logging.ClearProviders();
// now register everything you *really* want
// …
});
Esto se introdujo en respuesta a este problema de registro en GitHub .