Entity framework core CosmosDb实体框架核心提供程序日志记录
我正在尝试获取CosmosDb实体框架核心提供程序的日志,以查看正在执行的查询。出于性能原因,我还想测量本地仿真器的请求单位。不使用EF Core有来自CosmosDbClient的响应,但在这个特定的情况下,我希望使用 EF核心CosmosDb提供程序 从这一点来看似乎是可能的,但这种日志记录方式已被弃用,甚至无法在.NETCore3.1上编译 同时查看源代码,实现了DbLoggerCategory.Database.Command的IDiagnisticsLogger 我在Startup.cs中尝试了以下内容,但遗憾的是控制台中没有打印任何查询Entity framework core CosmosDb实体框架核心提供程序日志记录,entity-framework-core,entity-framework-core-cosmosdb,Entity Framework Core,Entity Framework Core Cosmosdb,我正在尝试获取CosmosDb实体框架核心提供程序的日志,以查看正在执行的查询。出于性能原因,我还想测量本地仿真器的请求单位。不使用EF Core有来自CosmosDbClient的响应,但在这个特定的情况下,我希望使用 EF核心CosmosDb提供程序 从这一点来看似乎是可能的,但这种日志记录方式已被弃用,甚至无法在.NETCore3.1上编译 同时查看源代码,实现了DbLoggerCategory.Database.Command的IDiagnisticsLogger 我在Startup.
public void ConfigureServices(IServiceCollection services)
{
_applicationOptions = GetApplicationOptions(services);
services.AddDbContext<MyDbContext>(options =>
{
options.UseCosmos(_applicationOptions.AccountEndpoint, _applicationOptions.AccountKey, "MySecretDb");
options.UseLoggerFactory(GetLoggerFactory());
});
...
}
private ILoggerFactory GetLoggerFactory()
{
IServiceCollection serviceCollection = new ServiceCollection();
if (Environment.IsDevelopment())
{
serviceCollection.AddLogging(builder =>
builder.AddConsole()
.AddFilter(DbLoggerCategory.Database.Command.Name, Microsoft.Extensions.Logging.LogLevel.Debug));
}
return serviceCollection.BuildServiceProvider()
.GetService<ILoggerFactory>();
}
配置中的日志部分不起作用
我已经在我的json开发中尝试过这个方法,它应该可以工作,但不知何故不起作用
{
"Logging": {
"Console": {
"IncludedScopes": true,
"LogLevel": {
"Microsoft.EntityFrameworkCore.Database.Command": "Debug"
},
"Default": "Information"
},
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
如何使用CreateDefaultBinder使其工作,它接受appsettings.{env}.json?您应该在配置的日志级别部分为指定“Microsoft.EntityFrameworkCore”:“Debug”
。
但您使用的更具体的过滤器应该可以工作。以下是我尝试过的:
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Information",
"Microsoft.Hosting.Lifetime": "Information",
"Microsoft.EntityFrameworkCore.Database.Command": "Debug"
}
}
重要的一点是:我没有指定自定义记录器工厂,默认的工厂是自动注入的。对于手动创建logger factory时从配置系统(包括json文件)加载的配置,您需要:
loggingBuilder.AddConfiguration(configuration.GetSection("Logging"));
这正是
CreateDefaultBuilder
为默认日志工厂所做的。您回答问题已经晚了一年;)我不知道你的答案是否正确,而我自己也早已回答了这个问题。不管怎样,谢谢对不起,也许这对其他人有用:)
loggingBuilder.AddConfiguration(configuration.GetSection("Logging"));