Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 546
davioooh Avatar asked Jan 08 '23 18:01

davioooh


2 Answers

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

like image 161
davioooh Avatar answered Jan 19 '23 02:01

davioooh


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);
    }
}
like image 44
Matthias Burger Avatar answered Jan 19 '23 02:01

Matthias Burger