davioooh
davioooh

Reputation: 24666

How to log SQL generated by EF using log4net

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?

Upvotes: 6

Views: 7748

Answers (2)

Matthias Burger
Matthias Burger

Reputation: 5946

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

Upvotes: 5

davioooh
davioooh

Reputation: 24666

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

Upvotes: 8

Related Questions