EF Core 2.2 LoggerFactory 不将数据库命令记录到控制台

EF Core 2.2 LoggerFactory not Logging DB commands to Console

我正在尝试从我的 DbContext 向控制台 window 执行日志记录数据库命令,以便我可以在将 T-SQL 查询发送到数据库之前对其进行检查.

我在 DbContext 中定义了一个 ILoggerFactory:

public class PocContext : DbContext
{
    public static readonly ILoggerFactory MyLoggerFactory = new LoggerFactory(new[]
    {
        new ConsoleLoggerProvider((cat, lvl) =>
            cat == DbLoggerCategory.Database.Command.Name &&
            lvl == LogLevel.Information, true)
    });

并将其添加到 Startup 服务配置中:

public void ConfigureServices(IServiceCollection services)
{
    // ... other config stuff

    services.AddDbContext<PocContext>(options =>
        options
            .UseLoggerFactory(PocContext.MyLoggerFactory)
            .EnableSensitiveDataLogging()
            .UseOracle(_configuration.GetConnectionString("Foo"))
    );

...通过观看@JulieLerman EF Core 视频,我期待每次在我的 DbContext 向数据库发出 T-SQL 语句之前弹出一个控制台 window - 但对我来说,什么都没有发生。我在我的 _context.Things.ToList()_context.Things.Find(id) 中设置了断点,但没有出现日志记录 window,它只是在浏览器 window.

中显示来自数据库的错误

我尝试更改 ConsoleLoggerProvider 的配置以捕获更多日志事件:

public class PocContext : DbContext
{
    public static readonly ILoggerFactory MyLoggerFactory = new LoggerFactory(new[]
    {
        new ConsoleLoggerProvider((cat, lvl) => true, true)
    });

...但仍然没有控制台 window。我忘记了什么?

  1. 查询记录到控制台默认。您无需执行任何操作。

  2. 控制台 window 不会直接弹出。您必须 运行 控制台 window 中,然后日志将显示在那里,即 dotnet run MyProject.csproj 在命令行中。如果您是 Visual Studio 中的 运行,您将不会获得控制台 window,但可以在“输出”窗格中查看控制台输出。在该窗格的下拉列表中,选择 "ASP.NET Core Web Server".

  3. 在所有其他情况下(IIS 等),登录到控制台不会为您做任何事情,因为没有办法看到它。您可以使用配置将输出重定向到另一个日志记录提供程序。参见:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-2.2#log-filtering