gpt4 book ai didi

c# - Log Entity Framework .Net Core 2.2 EF 调试输出窗口

转载 作者:行者123 更新时间:2023-11-30 15:14:04 25 4
gpt4 key购买 nike

使用 .Net Core 2.2 中的 Entity Framework ,我想将 EF 生成的所有 SQL 语句记录到 Visual Studio 中的“调试输出”窗口。

在 .Net Framework 中,我只需将这一行添加到 DbContext 构造函数中:

Database.Log = s => System.Diagnostics.Debug.WriteLine(s);

在 EF 中,我正在尝试以下操作。它会编译,并且会调用 OnConfiguring 方法,但没有数据库调用记录到我的调试输出窗口。我错过了什么?

public class MyContext : DbContext
{
private ILoggerFactory GetLoggerFactory()
{
IServiceCollection serviceCollection = new ServiceCollection();
serviceCollection.AddLogging(builder => builder
.AddDebug()
.AddFilter(DbLoggerCategory.Database.Command.Name, LogLevel.Debug));
return serviceCollection.BuildServiceProvider()
.GetService<ILoggerFactory>();
}

public MyContext(DbContextOptions<MembershipContext> options) : base(options)
{
}

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseLoggerFactory(GetLoggerFactory());
}
}

我的 appsettings.json 包含这个:

  "Logging": {
"LogLevel": {
"Default": "Debug"
}

},

我的 Startup.cs 在 ConfigureServices 方法中包含这一行:

services.AddDbContext<MyContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("MyConnectionSTring")));

Startup.cs 也包含以下每个答案中的一个,但它不会导致 EF SQL 打印到输出窗口:

    public ILogger<Startup> Logger { get; set; }

public Startup(IConfiguration configuration, ILogger<Startup> logger)
{
Configuration = configuration;
Logger = logger;

//the following line gets printed to my debug output window:
logger.LogDebug("this is a debug message");
}

最佳答案

我无法在我的 EFCore 3 应用程序中使用 .AddDebug()。我将 nuget 包 Microsoft.Extensions.Logging.Debug 添加到我的项目中并且能够使用它。我现在在输出窗口中看到生成的 SQL 命令(显示调试的输出)。

在上下文中创建一个字段:

public static readonly ILoggerFactory _loggerFactory
= LoggerFactory.Create(builder => builder.AddDebug().AddFilter((category, level) => level == LogLevel.Information && !category.EndsWith("Connection")));

并将该字段添加到您的 optionsBuilder:

 optionsBuilder.UseLoggerFactory(_loggerFactory);

关于c# - Log Entity Framework .Net Core 2.2 EF 调试输出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56259548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com