如何使用log4net记录EF生成的SQL

本文关键字:SQL EF 何使用 log4net 记录 | 更新日期: 2023-09-27 18:07:48

在我的web项目中,我使用EF6,我想记录生成的SQL用于调试目的。

我也使用log4net来处理日志,所以我正在寻找一种方法将它们集成在一起。

实现这一点的正确方法是什么?

如何使用log4net记录EF生成的SQL

目前我正在使用这种方法:在我的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,或者不想使用BaseController类):

就在继承DbContext时,您也可以在构造函数中这样做:

public class MyContext:DbContext
{
    private readonly ILog _logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
    public MyContext()
           : base("<connectionstring>")
    {
        Database.Log = log => _logger.Debug(log);
    }
}