Entity framework core CosmosDb实体框架核心提供程序日志记录

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.

我正在尝试获取CosmosDb实体框架核心提供程序的日志,以查看正在执行的查询。出于性能原因,我还想测量本地仿真器的请求单位。不使用EF Core有来自CosmosDbClient的响应,但在这个特定的情况下,我希望使用 EF核心CosmosDb提供程序

从这一点来看似乎是可能的,但这种日志记录方式已被弃用,甚至无法在.NETCore3.1上编译

同时查看源代码,实现了DbLoggerCategory.Database.Command的IDiagnisticsLogger

我在Startup.cs中尝试了以下内容,但遗憾的是控制台中没有打印任何查询

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"));