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

时间:2015-08-13 08:55:56

标签: c# .net entity-framework entity-framework-6 log4net

在我的网页项目中,我正在使用 EF6 ,我想记录生成的SQL以进行调试。

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

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

2 个答案:

答案 0 :(得分:6)

目前我正在使用这种方法:在我的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));

        // ...
    }

    //...

}

我不知道这是不是最好的方式,但它有效......

答案 1 :(得分:2)

如果有人在2年后仍在搜索解决方案:

@davioooh的解决方案让我得到了类似的东西(如果你可能使用Entity Framework而不是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);
    }
}