When you are using the built-in logging in ASP.NET Core, you can filter out specific information by changing the log levels in the appsettings.json:
{ | |
"Logging": { | |
"LogLevel": { | |
"Default": "Information", | |
"Microsoft.AspNetCore": "Warning" | |
} | |
} | |
} |
But when you switch to Serilog, this no longer works and the configuration values are ignored.
Our original configuration looked like this:
using Serilog; | |
using Serilog.Events; | |
public class Program | |
{ | |
public static int Main(string[] args) | |
{ | |
// Create the Serilog logger, and configure the sinks | |
Log.Logger = new LoggerConfiguration() | |
.Enrich.FromLogContext() | |
.WriteTo.File("logs.txt") | |
.CreateLogger(); | |
// Wrap creating and running the host in a try-catch block | |
try | |
{ | |
Log.Information("Starting host"); | |
CreateHostBuilder(args).Build().Run(); | |
return 0; | |
} | |
catch (Exception ex) | |
{ | |
Log.Fatal(ex, "Host terminated unexpectedly"); | |
return 1; | |
} | |
finally | |
{ | |
Log.CloseAndFlush(); | |
} | |
} | |
public static IHostBuilder CreateHostBuilder(string[] args) => | |
Host.CreateDefaultBuilder(args) | |
.UseSerilog() // <- Add this line | |
.ConfigureWebHostDefaults(webBuilder => | |
{ | |
webBuilder.UseStartup<Startup>(); | |
}); | |
} |
Here is what was logged by default after switching to Serilog:
2022-02-03 12:17:07.861 +01:00 [WRN] Failed to determine the https port for redirect.
2022-02-03 12:17:58.429 +01:00 [WRN] Failed to determine the https port for redirect.
2022-02-03 12:19:19.555 +01:00 [WRN] Failed to determine the https port for redirect.
2022-02-03 12:20:21.553 +01:00 [INF] OnStarted has been called.
2022-02-03 12:20:21.631 +01:00 [INF] Request starting HTTP/1.1 POST http://localhost/mail/ application/json;+charset=utf-8 318
2022-02-03 12:20:21.631 +01:00 [INF] Request starting HTTP/1.1 POST http://localhost/mail/ application/json;+charset=utf-8 318
2022-02-03 12:20:21.631 +01:00 [INF] Request starting HTTP/1.1 POST http://localhost/mail/ application/json;+charset=utf-8 318
2022-02-03 12:20:21.636 +01:00 [INF] Request starting HTTP/1.1 POST http://localhost/mail/ application/json;+charset=utf-8 318
2022-02-03 12:20:21.639 +01:00 [INF] Request starting HTTP/1.1 POST http://localhost/mail/ application/json;+charset=utf-8 318
2022-02-03 12:20:21.639 +01:00 [INF] Request starting HTTP/1.1 POST http://localhost/mail/ application/json;+charset=utf-8 318
2022-02-03 12:20:21.640 +01:00 [INF] Request starting HTTP/1.1 POST http://localhost/mail/ application/json;+charset=utf-8 318
2022-02-03 12:20:21.640 +01:00 [INF] Request starting HTTP/1.1 POST http://localhost/mail/ application/json;+charset=utf-8 318
2022-02-03 12:20:21.640 +01:00 [INF] Request starting HTTP/1.1 POST http://localhost/mail/ application/json;+charset=utf-8 318
2022-02-03 12:20:21.640 +01:00 [INF] Request starting HTTP/1.1 POST http://localhost/mail/ application/json;+charset=utf-8 318
2022-02-03 12:20:21.671 +01:00 [WRN] Failed to determine the https port for redirect.
2022-02-03 12:20:21.677 +01:00 [INF] Executing endpoint 'Mailing.API.Controllers.MailController.Send (Mailing.API)'
2022-02-03 12:20:21.677 +01:00 [INF] Executing endpoint 'Mailing.API.Controllers.MailController.Send (Mailing.API)'
2022-02-03 12:20:21.677 +01:00 [INF] Executing endpoint 'Mailing.API.Controllers.MailController.Send (Mailing.API)'
2022-02-03 12:20:21.706 +01:00 [INF] Route matched with {action = "Send", controller = "Mail"}. Executing controller action with signature System.Threading.Tasks.Task`1[Microsoft.AspNetCore.Mvc.IActionResult] Send(Mailing.DTO.SendMailMessage, System.Threading.CancellationToken) on controller Mailing.API.Controllers.MailController (Mailing.API).
2022-02-03 12:20:21.717 +01:00 [INF] Route matched with {action = "Send", controller = "Mail"}. Executing controller action with signature System.Threading.Tasks.Task`1[Microsoft.AspNetCore.Mvc.IActionResult] Send(Mailing.DTO.SendMailMessage, System.Threading.CancellationToken) on controller Mailing.API.Controllers.MailController (Mailing.API).
2022-02-03 12:20:21.729 +01:00 [INF] Route matched with {action = "Send", controller = "Mail"}. Executing controller action with signature System.Threading.Tasks.Task`1[Microsoft.AspNetCore.Mvc.IActionResult] Send(Mailing.DTO.SendMailMessage, System.Threading.CancellationToken) on controller Mailing.API.Controllers.MailController (Mailing.API).
2022-02-03 12:20:21.794 +01:00 [INF] Configured endpoint mediator, Consumer: Mailing.API.Domain.MailConsumer
2022-02-03 12:20:21.900 +01:00 [INF] Executing action method Mailing.API.Controllers.MailController.Send (Mailing.API) - Validation state: "Valid"
2022-02-03 12:20:21.900 +01:00 [INF] Executing action method Mailing.API.Controllers.MailController.Send (Mailing.API) - Validation state: "Valid"
2022-02-03 12:20:21.900 +01:00 [INF] Executing action method Mailing.API.Controllers.MailController.Send (Mailing.API) - Validation state: "Valid"
Whoops! Thatās way too much information.
To fix it, you can override the minimal loglevel in Serilog for specific targets:
Log.Logger = new LoggerConfiguration() | |
.MinimumLevel.Debug() | |
.MinimumLevel.Override("Microsoft", LogEventLevel.Information) | |
// Filter out ASP.NET Core infrastructre logs that are Information and below | |
.MinimumLevel.Override("Microsoft.AspNetCore", LogEventLevel.Warning) | |
.Enrich.FromLogContext() |
This will help you to keep the amount of log data under control.