阻止 .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)
您需要明确删除默认提供程序并仅添加您想要的提供程序。
IHostBuilder hostBuilder = Host.CreateDefaultBuilder(args);
//...
hostBuilder.ConfigureLogging(logging => {
logging.ClearProviders();
//... add my providers here
});
//...
请注意,如果您想避免其他扩展添加自己的提供程序,请最后执行日志记录配置,以便您确定添加了哪些记录器。
我已经在我的应用程序中实现了依赖注入。而我配置服务如下。
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)
您需要明确删除默认提供程序并仅添加您想要的提供程序。
IHostBuilder hostBuilder = Host.CreateDefaultBuilder(args);
//...
hostBuilder.ConfigureLogging(logging => {
logging.ClearProviders();
//... add my providers here
});
//...
请注意,如果您想避免其他扩展添加自己的提供程序,请最后执行日志记录配置,以便您确定添加了哪些记录器。