Asp.Net Core API禁用启动完成消息

sty*_*ybl 14 c# asp.net-core-mvc .net-core asp.net-core

作为我的应用程序的一部分,我有一个.Net Core API项目.与此项目作为自己的流程运行的大多数情况不同,我在一个线程中运行API,在其他流程中运行.同样对于我的项目,我已经实现了一个自定义日志记录系统以满足我的需求.但是,我遇到了一个小问题.每次运行我的程序时,一旦API启动,此消息将打印到控制台:

Hosting environment: Production
Content root path: C:\Users\Path\To\Code
Now listening on: http://*:8000
Application started. Press Ctrl+C to shut down.
Run Code Online (Sandbox Code Playgroud)

我想禁用此消息,因为不需要它,并且它使组织良好的控制台日志变得混乱.我有一个截图,所以你知道我在说什么:

消息的屏幕截图

我已经禁用了所有其他的日志记录的MVC(除去ILoggerFactory来自ConfigureServices并将所有日志记录在"无" appsettings.json).

如何禁用/禁止此消息?

Mai*_*ori 5

你也可以这样做:

var host = BuildWebHost(args);
host.Start();
host.WaitForShutdown();
Run Code Online (Sandbox Code Playgroud)

这将绕过Console.WriteLine()s。

  • 刚刚测试过,它可以工作,而不会使控制台无法使用。谢谢。 (2认同)

mco*_*ont 5

在ASP.NET 2.1的核心,使用SuppressStatusMessages的方法WebHostBuilder

WebHost.CreateDefaultBuilder()
    .UseStartup<Startup>()
    .SuppressStatusMessages(true);
Run Code Online (Sandbox Code Playgroud)


gfx*_*687 5

.NET 核心 3.x

好消息! ASP.NET CoreConsole不再使用plain 编写这些烦人的消息。现在使用抽象Logger,因此启动消息将由您的记录器以配置的格式写入,就像任何其他日志一样。

但是如果你想一直摆脱这些日志,你可以使用以下两种方法之一

第一种方法是使用.ConfigureLogging(...)主机构建器上的方法从记录器中删除所有默认提供程序:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureLogging(loggingBuilder => 
        {
            loggingBuilder.ClearProviders(); // <-- here
        })
        .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });
Run Code Online (Sandbox Code Playgroud)

另一种方法是ConsoleLifetimeOptions在您的.NET Core 3 记录器中配置Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    // ... 

    services.Configure<ConsoleLifetimeOptions>(opts => opts.SuppressStatusMessages = true);

    // ...
}
Run Code Online (Sandbox Code Playgroud)

注意:第二种方法不会禁用有关在端口上侦听的应用程序的 Kestrel 日志(但首先会)

info: Microsoft.Hosting.Lifetime[0]
      Now listening on: https://localhost:5001
info: Microsoft.Hosting.Lifetime[0]
      Now listening on: http://localhost:5000
Run Code Online (Sandbox Code Playgroud)

.NET 核心 2.x

可以通过两种方式禁用这些消息(除了已经提到的控制台设置):

1)您可以使用环境变量禁用它们: "ASPNETCORE_SUPPRESSSTATUSMESSAGES": "true"

2)或通过代码(在Program.cs):

WebHost.CreateDefaultBuilder(args)
    .UseSetting(WebHostDefaults.SuppressStatusMessagesKey, "True") 
Run Code Online (Sandbox Code Playgroud)

或者

WebHost.CreateDefaultBuilder(args)
    .SuppressStatusMessages(true);
Run Code Online (Sandbox Code Playgroud)