如何记录由DbContext进行的SQL查询?

ConfigureServices中,我使用DbContext来准备services.AddDbContext,我想将ILoggerFactory.UseLoggerFactory(...)一起传递给它。但是我第一次可以得到ILoggerFactory在这里

public void Configure(IApplicationBuilder app,IWebHostEnvironment env,ILoggerFactory loggerFactory)

Configure的调用晚于ConfigureServices。当然,我可以在ConfigureServices中自己创建一个记录器工厂,但是如果框架提供了这种功能,我很奇怪。

我正在寻找一种结构合理的方法来建立日志记录,包括从DbContext开始的日志记录。

dayue0618 回答:如何记录由DbContext进行的SQL查询?

通常,我们创建LoggerFactory的LoggerFactory实例的单例/全局实例,然后将其与DbContext绑定,然后在optionsBuilder.UseLoggerFactory()方法中传递对象:

public class SchoolContext : DbContext
{
    public static readonly ILoggerFactory MyLoggerFactory
    = LoggerFactory.Create(builder => { builder.AddConsole(); });

    public SchoolContext():base()
    {

    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseLoggerFactory(loggerFactory)  //tie-up DbContext with LoggerFactory object
            .UseSqlServer(@"Server=.\SQLEXPRESS;Database=SchoolDB;Trusted_Connection=True;");
    }

    public DbSet<Student> Students { get; set; }
}

文档:https://docs.microsoft.com/en-us/ef/core/miscellaneous/logging?tabs=v3

本文链接:https://www.f2er.com/2858426.html

大家都在问