RejestrowanieLogging

Porada

Przykład użyty w tym artykule można zobaczyć w witrynie GitHub.You can view this article's sample on GitHub.

Aplikacje platformy ASP.NET CoreASP.NET Core applications

EF Core automatycznie integruje się z mechanizmami rejestracji programu ASP.NET Core przy każdym AddDbContext lub AddDbContextPool jest używany.EF Core integrates automatically with the logging mechanisms of ASP.NET Core whenever AddDbContext or AddDbContextPool is used. W związku z tym, korzystając z platformy ASP.NET Core, rejestrowanie należy skonfigurować zgodnie z opisem w dokumentacji platformy ASP.NET Core.Therefore, when using ASP.NET Core, logging should be configured as described in the ASP.NET Core documentation.

Inne aplikacjeOther applications

EF Core rejestrowania obecnie wymaga element ILoggerFactory, która sama skonfigurowane z co najmniej jeden ILoggerProvider.EF Core logging currently requires an ILoggerFactory which is itself configured with one or more ILoggerProvider. Typowe dostawcy są dostarczane w następujących pakietów:Common providers are shipped in the following packages:

Po zainstalowaniu odpowiednich pakietów aplikacji powinien utworzyć pojedyncze/globalnego wystąpienia LoggerFactory.After installing the appropriate package(s), the application should create a singleton/global instance of a LoggerFactory. Na przykład za pomocą rejestratora konsoli:For example, using the console logger:

public static readonly LoggerFactory MyLoggerFactory
    = new LoggerFactory(new[] {new ConsoleLoggerProvider((_, __) => true, true)});

To wystąpienie singleton/globalne następnie powinny być rejestrowane z programem EF Core na DbContextOptionsBuilder.This singleton/global instance should then be registered with EF Core on the DbContextOptionsBuilder. Na przykład:For example:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    => optionsBuilder
        .UseLoggerFactory(MyLoggerFactory) // Warning: Do not create a new ILoggerFactory instance each time
        .UseSqlServer(
            @"Server=(localdb)\mssqllocaldb;Database=EFLogging;Trusted_Connection=True;ConnectRetryCount=0");

Ostrzeżenie

Jest to bardzo ważne jest, że aplikacji należy tworzyć nowe wystąpienie element ILoggerFactory dla każdego wystąpienia kontekstu.It is very important that applications do not create a new ILoggerFactory instance for each context instance. Ten sposób spowoduje przeciek pamięci i niską wydajnością.Doing so will result in a memory leak and poor performance.

Filtrowanie, co jest rejestrowaneFiltering what is logged

Najprostszym sposobem filtrowania, co jest rejestrowane jest skonfigurowane podczas rejestrowania ILoggerProvider.The easiest way to filter what is logged is to configure it when registering the ILoggerProvider. Na przykład:For example:

public static readonly LoggerFactory MyLoggerFactory
    = new LoggerFactory(new[]
    {
        new ConsoleLoggerProvider((category, level)
            => category == DbLoggerCategory.Database.Command.Name
               && level == LogLevel.Information, true)
    });

W tym przykładzie dziennik jest filtrowana w celu zwraca tylko wiadomości:In this example, the log is filtered to return only messages:

  • w kategorii "Microsoft.EntityFrameworkCore.Database.Command"in the 'Microsoft.EntityFrameworkCore.Database.Command' category
  • na poziomie "Informacje"at the 'Information' level

Dla platformy EF Core rejestratora kategorie są definiowane w DbLoggerCategory klasy, aby ułatwić znajdowanie kategorii, ale one rozpoznać zwykłe ciągi.For EF Core, logger categories are defined in the DbLoggerCategory class to make it easy to find categories, but these resolve to simple strings.

Szczegółowe informacje na temat podstawowej infrastruktury rejestrowania można znaleźć w dokumentacji rejestrowania platformy ASP.NET Core.More details on the underlying logging infrastructure can be found in the ASP.NET Core logging documentation.