Last active
May 15, 2018 14:01
-
-
Save tonysneed/4cac4f4dae2b22e45ec4 to your computer and use it in GitHub Desktop.
Configure EF7 to Log to the Console
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public static class DbContextExtensions | |
{ | |
public static void LogToConsole(this DbContext context) | |
{ | |
IServiceProvider contextServices = ((IDbContextServices)context).ScopedServiceProvider; | |
var loggerFactory = contextServices.GetRequiredService<ILoggerFactory>(); | |
loggerFactory.AddConsole(LogLevel.Verbose); | |
} | |
} |
@nbalakin the logger factory instance is shared across multiple DbContexts and thus everytime I call this code, another logger is added. As a result, provided I call this code when creating a new DbContext, after 5 DbContexts have been created during the application lifetime, all SQL queries are logged five times.
Am I doing anything wrong? Where exactly should this be called?
I have the same question, where should this code go? Thanks.
This worked for me with EF7 rc2-16485:
"EntityFramework.MicrosoftSqlServer": "7.0.0-rc2-16485",
"Microsoft.Extensions.Logging.Console": "1.0.0-rc2-15888",
public static class DbContextExtensions
{
public static void LogToConsole(this DbContext context)
{
var contextServices = ((IInfrastructure<IServiceProvider>) context).Instance;
var loggerFactory = contextServices.GetRequiredService<ILoggerFactory>();
loggerFactory.AddConsole(LogLevel.Verbose);
}
}
Where is the RTM Version?
oh,It doesn't work.
include these
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Debug;
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks @nbalakin and @tonysneed, it works.