-
-
Save tonysneed/4cac4f4dae2b22e45ec4 to your computer and use it in GitHub Desktop.
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); | |
} | |
} |
@tonysneed Is this still valid?
var service = ((IAccessor<IServiceProvider>)context).Service;
var loggerFactory = service.GetRequiredService<ILoggerFactory>();
loggerFactory.AddConsole(LogLevel.Verbose);
Thanks @nbalakin and @tonysneed, it works.
@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;
This code relies on the following NuGet packages:
EntityFramework.SqlServer
Microsoft.Framework.Logging.Console