Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Change logging level of SQL queries logged by Entity Framework Core

Entity Framework core by default logs all executed SQL queries to the ASP.NET Core logger (Microsoft.Extensions.Logging). The default log level is Informational, but it seems a bit chatty to me for informational logging. I would prefer it at Debug or even Trace level.

Is there any way to configure EFCore to log these SQL queries at Debug (or Trace) level, instead of Informational level?

like image 663
Nicky Muller Avatar asked Dec 19 '17 18:12

Nicky Muller


2 Answers

Since Entity Framework Core 3.0 it's possible to change to logging level of SQL queries. During to 3.0 previews all query execution logging was changed to Debug by default. Later this change got reverted and now it's configurable.

To do this override OnConfiguring in your DbContext and run the following snippet:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    => optionsBuilder.ConfigureWarnings(c => c.Log((RelationalEventId.CommandExecuting, LogLevel.Debug)));

See: https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-3.0/breaking-changes#query-execution-is-logged-at-debug-level-reverted

like image 73
Nicky Muller Avatar answered Sep 28 '22 01:09

Nicky Muller


You can set log level of Microsoft or System messages individually.

For your EntityFramework chatty logging you can set this in your startup class.

services.AddLogging(builder =>
{
    builder.AddFilter("Microsoft", LogLevel.Warning);
    builder.AddFilter("System", LogLevel.Error);
});
like image 24
Benj Avatar answered Sep 28 '22 01:09

Benj