问题
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:
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...
回答2:
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);
}
}
来源:https://stackoverflow.com/questions/31983706/how-to-log-sql-generated-by-ef-using-log4net