阻止 .NET 登录到控制台?

Prevent .NET from logging to the console?

我已经在我的应用程序中实现了依赖注入。而我配置服务如下。

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

一切正常,除了现在框架正在记录到控制台,包括发送到数据库的任何查询的内容。

不知何故内部日志记录已启用,但我看不到我在哪里启用它。

如何防止 .NET 登录屏幕?

注:Logger是我自己记录的实例classConsoleLogger。此 class 未实现 ILogger 或使用 .NET 中的任何其他内容。它只是一个自定义 class,它也记录到控制台和文件。从此记录器进行记录工作正常。我已经确认 .NET 日志没有发送到此 class.

更新:

这是我配置主机的代码。

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

这是调用它的代码。

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 =>
{

});

备注

The CreateDefaultBuilder method:
...
...
Adds the following logging providers:

  • Console
  • Debug
  • EventSource
  • EventLog (only when running on Windows)

引用Default builder settings

您需要明确删除默认提供程序并仅添加您想要的提供程序。

IHostBuilder hostBuilder = Host.CreateDefaultBuilder(args);

//...

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

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

//...

请注意,如果您想避免其他扩展添加自己的提供程序,请最后执行日志记录配置,以便您确定添加了哪些记录器。