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。我忘记了什么?
查询记录到控制台默认。您无需执行任何操作。
控制台 window 不会直接弹出。您必须 运行 在 控制台 window 中,然后日志将显示在那里,即 dotnet run MyProject.csproj
在命令行中。如果您是 Visual Studio 中的 运行,您将不会获得控制台 window,但可以在“输出”窗格中查看控制台输出。在该窗格的下拉列表中,选择 "ASP.NET Core Web Server".
在所有其他情况下(IIS 等),登录到控制台不会为您做任何事情,因为没有办法看到它。您可以使用配置将输出重定向到另一个日志记录提供程序。参见:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-2.2#log-filtering
我正在尝试从我的 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。我忘记了什么?
查询记录到控制台默认。您无需执行任何操作。
控制台 window 不会直接弹出。您必须 运行 在 控制台 window 中,然后日志将显示在那里,即
dotnet run MyProject.csproj
在命令行中。如果您是 Visual Studio 中的 运行,您将不会获得控制台 window,但可以在“输出”窗格中查看控制台输出。在该窗格的下拉列表中,选择 "ASP.NET Core Web Server".在所有其他情况下(IIS 等),登录到控制台不会为您做任何事情,因为没有办法看到它。您可以使用配置将输出重定向到另一个日志记录提供程序。参见:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-2.2#log-filtering