Skip to content

Instantly share code, notes, and snippets.

@tonysneed
Last active May 15, 2018 14:01
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save tonysneed/4cac4f4dae2b22e45ec4 to your computer and use it in GitHub Desktop.
Save tonysneed/4cac4f4dae2b22e45ec4 to your computer and use it in GitHub Desktop.
Configure EF7 to Log to the Console
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
Copy link
Author

This code relies on the following NuGet packages:
EntityFramework.SqlServer
Microsoft.Framework.Logging.Console

@ErikEJ
Copy link

ErikEJ commented May 17, 2015

@tonysneed Is this still valid?

@MykolaBalakin
Copy link

@ErikEJ

var service = ((IAccessor<IServiceProvider>)context).Service;
var loggerFactory = service.GetRequiredService<ILoggerFactory>();
loggerFactory.AddConsole(LogLevel.Verbose);

@tongbong
Copy link

Thanks @nbalakin and @tonysneed, it works.

@gius
Copy link

gius commented Aug 11, 2015

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

@bragma
Copy link

bragma commented Nov 6, 2015

I have the same question, where should this code go? Thanks.

@michaelvolz
Copy link

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);
        }
    }

@SergeySagan
Copy link

Where is the RTM Version?

@FisherMS
Copy link

oh,It doesn't work.

@MohammadMQ
Copy link

MohammadMQ commented May 15, 2018

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