Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Asp.Net Core API disable startup complete message

As part of my application I have a .Net Core API project. Unlike most cases where this project would run as its own process, I have the API run in a thread, among others, in a single process. Also for my project, I have implemented a custom logging system to suit my needs. However, I have come across a slight problem. Every time I run my program, once the API starts, this message is printed to the console:

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

I would like to disable this message as there is no need for it, and it clutters up the otherwise well organized console log. I have a screenshot below so you know exactly what I'm talking about:

Screenshot of message

I have already disabled all other logging for the mvc (removed ILoggerFactory from ConfigureServices and set all logging to "None" in appsettings.json).

How do I go about disabling/suppressing this message?

like image 541
stelioslogothetis Avatar asked May 25 '17 14:05

stelioslogothetis


4 Answers

.NET Core 3.x

Good news! These annoying messages are not being written by ASP.NET Core using plain Console anymore. Now abstract Logger is used, so startup messages will be written by your logger in configured format, just like any other logs.

But if you want to get rid of these logs all along, you can use one of two following approaches

The first way is to use .ConfigureLogging(...) method on host builder to remove all default providers from logger:

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

The other way is to configure .NET Core 3 logger with ConsoleLifetimeOptions in your Startup.cs:

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

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

    // ...
}

NOTE: second approach won't disable Kestrel logs about an app being listened on port (but first will)

info: Microsoft.Hosting.Lifetime[0]
      Now listening on: https://localhost:5001
info: Microsoft.Hosting.Lifetime[0]
      Now listening on: http://localhost:5000

.NET Core 2.x

These messages can be disabled in 2 ways (besides already mentioned console settings):

1) You can disable them with Environment variable: "ASPNETCORE_SUPPRESSSTATUSMESSAGES": "true"

2) Or through code (in Program.cs):

WebHost.CreateDefaultBuilder(args)
    .UseSetting(WebHostDefaults.SuppressStatusMessagesKey, "True") 

or

WebHost.CreateDefaultBuilder(args)
    .SuppressStatusMessages(true);
like image 99
gfx687 Avatar answered Nov 14 '22 22:11

gfx687


In ASP.NET Core 2.1, use the SuppressStatusMessages method on the WebHostBuilder.

WebHost.CreateDefaultBuilder()
    .UseStartup<Startup>()
    .SuppressStatusMessages(true);
like image 29
mcont Avatar answered Nov 14 '22 21:11

mcont


You could also do this:

var host = BuildWebHost(args);
host.Start();
host.WaitForShutdown();

This will bypass the Console.WriteLine()s.

like image 5
Maiku Mori Avatar answered Nov 14 '22 23:11

Maiku Mori


Removing logger factory won't help, because it is Console.WriteLine() (Ref : Github issue comment) . You need to suppress the Console.WriteLine outputs. In the Main method, write code like this. This will ignore the Console.WriteLine outputs.

public static void Main(string[] args)
{
    Console.SetOut(new StreamWriter(Stream.Null));
    BuildWebHost(args).Run();
}
like image 2
Anuraj Avatar answered Nov 14 '22 23:11

Anuraj