-
-
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