How to log queries using Entity Framework 7?

前端 未结 10 1410
清歌不尽
清歌不尽 2020-12-15 23:55

I am using Entity Framework 7 on the nightly build channel (right now I\'m using version EntityFramework.7.0.0-beta2-11524) and I\'m trying to log the queries that EF genera

相关标签:
10条回答
  • 2020-12-16 00:36

    For those using EF7 none of the above worked for me. But this is how i got it working. (from @avi cherry's comment)

    In your Startup.cs you proably have a Configure method with a bunch of configurations in it. It should look like below (in addition to your stuff).

        public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
        {
            //this is the magic line
            loggerFactory.AddDebug(LogLevel.Debug); // formerly LogLevel.Verbose
    
            //your other stuff
    
        }
    
    0 讨论(0)
  • 2020-12-16 00:36

    As an alternative to the above answers, I found this answer by far the easiest solution for me to reason about:

    private readonly ILoggerFactory loggerFactory;
    
    // Using dependency injection
    public FooContext(ILoggerFactory loggerFactor) {
        this.loggerFactory = loggerFactory;
    }
    
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
        optionsBuilder.UseLoggerFactory(loggerFactory);    // Register logger in context
    }
    
    0 讨论(0)
  • 2020-12-16 00:36

    For those who just want SQL queries to be logged (using Entity Framework Core with .NET Core 2.0 or above), use the following code in your DbContext class:

    public static readonly LoggerFactory MyLoggerFactory
        = new LoggerFactory(new[]
        {
            new ConsoleLoggerProvider((category, level)
                => category == DbLoggerCategory.Database.Command.Name
                   && level == LogLevel.Information, true)
        });
    
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        => optionsBuilder
            .UseLoggerFactory(MyLoggerFactory) // Warning: Do not create a new ILoggerFactory instance each time
            .UseSqlServer(
                @"Server=(localdb)\mssqllocaldb;Database=EFLogging;Trusted_Connection=True;ConnectRetryCount=0");
    

    Reference: https://docs.microsoft.com/en-us/ef/core/miscellaneous/logging

    0 讨论(0)
  • 2020-12-16 00:41

    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);
        }
    }
    
    0 讨论(0)
提交回复
热议问题