如何使用 log4net 记录 EF 生成的 SQL
How to log SQL generated by EF using log4net
在我的 Web 项目中,我使用 EF6 并且我想记录生成的 SQL 用于调试目的。
我也在使用log4net来处理日志,所以我正在寻找一种将它们集成在一起的方法。
实现此目标的正确方法是什么?
目前我正在使用这种方法:在我的 BaseController
我有这样的东西:
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));
// ...
}
//...
}
我不知道这是否是最好的方法,但它确实有效...
如果有人在 2 年后仍在搜索解决方案:
@davioooh 的解决方案让我想到了类似的东西(如果您可能不使用 WebApi 使用 Entity Framework,或者不想使用 BaseController
-class) :
只是在从 DbContext
继承时,您也可以在构造函数中这样做:
public class MyContext:DbContext
{
private readonly ILog _logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public MyContext()
: base("<connectionstring>")
{
Database.Log = log => _logger.Debug(log);
}
}
在我的 Web 项目中,我使用 EF6 并且我想记录生成的 SQL 用于调试目的。
我也在使用log4net来处理日志,所以我正在寻找一种将它们集成在一起的方法。
实现此目标的正确方法是什么?
目前我正在使用这种方法:在我的 BaseController
我有这样的东西:
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));
// ...
}
//...
}
我不知道这是否是最好的方法,但它确实有效...
如果有人在 2 年后仍在搜索解决方案:
@davioooh 的解决方案让我想到了类似的东西(如果您可能不使用 WebApi 使用 Entity Framework,或者不想使用 BaseController
-class) :
只是在从 DbContext
继承时,您也可以在构造函数中这样做:
public class MyContext:DbContext
{
private readonly ILog _logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public MyContext()
: base("<connectionstring>")
{
Database.Log = log => _logger.Debug(log);
}
}