Как включить ведение журнала в EF Core 3? - PullRequest
0 голосов
/ 18 июня 2019

Я использую Entity Framework Core 3 Preview 5 и ASP.NET Core 3 Preview 5. В моем окне вывода отладки Visual Studio 2019 я не получаю журналы от EF Core. Я читаю документацию, но после этого меня еще больше смущает:

  1. В соответствии с https://docs.microsoft.com/en-us/dotnet/api/microsoft.entityframeworkcore.dbcontextoptionsbuilder.useloggerfactory?view=efcore-2.1 регистрация должна быть настроена автоматически:

Нет необходимости вызывать этот метод при использовании одного из методов AddDbContext. «AddDbContext» будет гарантировать, что ILoggerFactory, используемый EF, получен от поставщика услуг приложения.

Хотя это не мой опыт.

  1. Я попытался включить ведение журнала, введя ILoggerFactory в ConfigureServices (я намеревался затем передать его в DbContextOptionsBuilder.UseLoggerFactory, но это больше невозможно, см. https://github.com/aspnet/Announcements/issues/353

Итак, как мне настроить ведение журнала в окнах вывода отладки в EF Core 3.0? Спасибо!

1 Ответ

0 голосов
/ 18 июня 2019

Голосование за закрытие возможно из-за того, что в вопросе нет кода, который мог бы воспроизвести проблему.

В любом случае EF Core регистрирует на уровне отладки.Уровень по умолчанию, используемый универсальным компоновщиком хоста или компоновщиком веб-хоста, равен 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);
    }            
}

Он будет только регистрировать этоevent:

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, нам нужно изменить уровень ведения журнала для событий EF Core с Trace или 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...