如何使用 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);
    }
}