我正在使用Entity Framework Core 3 Preview 5和ASP.NET Core 3 Preview5。在Visual Studio 2019的调试输出窗口中,我没有从EF Core获得任何日志。我阅读了文档,但是之后我更加困惑:
使用'AddDbContext'方法之一时,无需调用此方法。 “ AddDbContext”将确保从应用程序服务提供商处获得EF使用的ILoggerFactory。
那不是我的经验。
ILoggerFactory
注入ConfigureServices
来启用日志记录(我打算将其传递给DbContextOptionsBuilder.UseLoggerFactory
,但是现在已经不可能了,请参见https://github.com/aspnet/Announcements/issues/353 < / li>
那么,如何在EF Core 3.0中设置日志记录到调试输出窗口?谢谢!
答案 0 :(得分:2)
另一个可能导致无法进行日志记录的关键原因是:对AddDbContext()
的注释具有未提及的依赖性。
使用以下任一方法时,无需调用此方法 'AddDbContext'方法。 “ AddDbContext”将确保 EF使用的ILoggerFactory是从应用程序服务获得的 提供者。
仅当您的DbContext
向DbContextOptions<T>
构造函数注入base
时,此方法才有效。
例如由Scaffold-DbContext
public MyDbContext(DbContextOptions<MyDbContext> options)
: base(options)
{
}
该注入的对象已经使用LoggerFactory进行了设置,因此,如果您不这样做,则必须在OnConfiguring()方法中手动设置记录器。
答案 1 :(得分:0)
票数接近可能是因为问题中没有代码可以重现该问题。
在任何情况下,EF Core均在调试级别记录日志。通用主机构建器或Web主机构建器使用的默认级别为Information
。日志记录级别必须更改为Trace
或Debug
。
默认情况下,此代码不会记录任何EF事件:
static async Task Main(string[] args)
{
var host = Host
.CreateDefaultBuilder(args)
.ConfigureServices((context, services) =>
{
var configuration = context.Configuration;
services.AddDbContext<MyContext>(options =>
options.UseSqlServer(configuration.GetConnectionString("someConnection")));
})
.Build();
using(var ctx=host.Services.GetRequiredService<MyContext>())
{
var cnt=await ctx.Customers.CountAsync();
Console.WriteLine(cnt);
}
}
它只会记录此事件:
info: Microsoft.EntityFrameworkCore.Infrastructure[10403]
Entity Framework Core 3.0.0-preview6.19304.10 initialized 'ConsolidatorsContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer' with options: None
要记录EF事件,我们需要通过Trace
或代码将EF Core事件的记录级别更改为Debug
或appsettings.json
。例如,将其包括在appsettings.json
中:
"Logging": {
"LogLevel": {
"Microsoft.EntityFrameworkCore":"Debug"
}
},
将记录EF事件:
dbug: Microsoft.EntityFrameworkCore.Infrastructure[10401]
An 'IServiceProvider' was created for internal use by Entity Framework.
info: Microsoft.EntityFrameworkCore.Infrastructure[10403]
Entity Framework Core 3.0.0-preview6.19304.10 initialized 'MyContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer' with options: None
dbug: Microsoft.EntityFrameworkCore.Database.Connection[20000]
Opening connection to database 'Customers' on server '10.0.0.216'.
dbug: Microsoft.EntityFrameworkCore.Database.Connection[20001]
Opened connection to database 'Customers' on server '10.0.0.216'.
dbug: Microsoft.EntityFrameworkCore.Database.Command[20100]
Executing DbCommand [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT COUNT(*)
FROM [Customers] AS [c]
dbug: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (42ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT COUNT(*)
FROM [Customers] AS [c]
4
dbug: Microsoft.EntityFrameworkCore.Database.Command[20300]
A data reader was disposed.
dbug: Microsoft.EntityFrameworkCore.Database.Connection[20002]
Closing connection to database 'Customers' on server '10.0.0.216'.
dbug: Microsoft.EntityFrameworkCore.Database.Connection[20003]
Closed connection to database 'Customers' on server '10.0.0.216'.
dbug: Microsoft.EntityFrameworkCore.Infrastructure[10407]
'MyContext' disposed.