Prevenir .NETO de registro a la consola?

0

Pregunta

He implementado la inyección de dependencias en mi aplicación. Y yo configuración de servicios de la siguiente manera.

IConfiguration configuration = context.Configuration;

services.AddDbContext<ApplicationDbContext>(options =>
{
    options.UseSqlServer(configuration.GetConnectionString("DefaultConnection"));
});

services.ConfigureRailIncApi(configuration);

services.Configure<EmailSettings>(configuration.GetSection("EmailSettings"));

services.AddSingleton(configuration);
services.AddSingleton(Logger);

services.AddSingleton<Application>();
services.AddSingleton<ServiceManager>();

Todo esto funciona bien excepto que ahora el marco es el registro de la consola, incluyendo el contenido de ninguna de las consultas enviadas a la base de datos.

De alguna manera, el interior se ha habilitado el registro, pero no veo donde he permitido.

¿Cómo se puede prevenir .NETO de registro a la pantalla?

Nota: Logger es un ejemplo de mi propio registro de clase ConsoleLogger. Esta clase no implementa ILogger o utilizar de cualquier otra cosa de .NET. Es simplemente una clase personalizada que también los registros de la consola y un archivo. El registro de este registrador está trabajando bien. Y he confirmado el .NETO de los registros no están siendo enviados a esta clase.

Actualización:

Aquí está mi código que configura el host.

public void Configure(string[] args, Action< HostBuilderContext, IServiceCollection> configureServices, Action<IHostBuilder> configureHost)
{
    IHostBuilder hostBuilder = Host.CreateDefaultBuilder(args);

    hostBuilder.ConfigureServices((context, services) =>
    {
        services.AddSingleton(this);
        configureServices(context, services);
    });

    configureHost(hostBuilder);

    AppHost = hostBuilder.Build();
}

Y aquí está el código que llama.

ApplicationServices appServices = new();

appServices.Configure(args, (context, services) =>
{
    IConfiguration configuration = context.Configuration;

    services.AddDbContext<ApplicationDbContext>(options =>
    {
        options.UseSqlServer(configuration.GetConnectionString("DefaultConnection"));
    });

    services.ConfigureRailIncApi(configuration);

    services.Configure<EmailSettings>(configuration.GetSection("EmailSettings"));

    services.AddSingleton(configuration);
    services.AddSingleton(Logger);

    services.AddSingleton<Application>();
    services.AddSingleton<ServiceManager>();
},
builder =>
{

});
.net-6.0 .net-core c# ilogger
2021-11-23 19:36:35
1

Mejor respuesta

1

Nota

El CreateDefaultBuilder método:
...
...
Agrega el siguiente registro de proveedores:

  • Consola
  • Depuración
  • EventSource
  • Registro de sucesos (sólo cuando se ejecuta en Windows)

De referencia por Defecto del generador de configuración

Usted tendría que quitar explícitamente el valor predeterminado proveedores y agregar sólo los que usted desea.

IHostBuilder hostBuilder = Host.CreateDefaultBuilder(args);

//...

hostBuilder.ConfigureLogging(logging => {
    logging.ClearProviders();

    //... add my providers here
});

//...

Tenga en cuenta que si usted desea evitar la extensión de la adición de sus propios proveedores, a continuación, realizar la configuración de registro del pasado de modo que usted está seguro acerca de que los madereros se han añadido.

2021-11-23 20:41:50

Sí, esto es exactamente lo que está sucediendo. No estoy seguro de por qué ConfigureLogging asumió la logging parámetro de tipo HostBuilderContext pero yo era capaz de forzarlo a ser ILoggingBuilder. Gracias por tu ayuda.
Jonathan Wood

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................