How to log SQL generated by EF using log4net

.net c# entity-framework entity-framework-6 log4net

Question

In my web project I'm using EF6 and I'd like to log generated SQL for debugging purpose.

I'm also using log4net to handle logs, so I'm looking for a way to integrate them together.

What's the correct way to achieve this?

1
3
8/8/2018 7:03:38 AM

Accepted Answer

At the moment I'm using this approach: in my BaseController I have something like this:

public class BaseController
{
    protected MyDbContext DataContext { get; set; }
    protected readonly ILog logger;

    public BaseController()
    {
        DataContext = new MyDbContext();
        logger = LogManager.GetLogger(GetType());

        DataContext.Database.Log = (dbLog => logger.Debug(dbLog));

        // ...
    }

    //...

}

I don't know if this is the best way, but it works...

6
8/13/2015 9:33:15 AM

Popular Answer

if someone after 2 years still searches for a solution:

the solution of @davioooh led me to something similar (if you probably use Entity Framework not with a WebApi, or don't want to use a BaseController-class):

Just when inheriting from DbContext you could also do this in the constructor:

public class MyContext:DbContext
{
    private readonly ILog _logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

    public MyContext()
           : base("<connectionstring>")
    {
        Database.Log = log => _logger.Debug(log);
    }
}


Related Questions





Related

Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow