RejestrowanieLogging

Porada

Można wyświetlić w tym artykule próbki w witrynie GitHub.You can view this article's sample on GitHub.

Aplikacje platformy ASP.NET CoreASP.NET Core applications

Podstawowe EF integruje się automatycznie z mechanims rejestrowanie dla platformy ASP.NET Core zawsze, gdy AddDbContext lub AddDbContextPool jest używany.EF Core integrates automatically with the logging mechanims of ASP.NET Core whenever AddDbContext or AddDbContextPool is used. W związku z tym podczas korzystania 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

Rejestrowanie obecnie Core EF wymaga element ILoggerFactory, która jest skonfigurowana z co najmniej jeden ILoggerProvider.EF Core logging currently requires an ILoggerFactory which is itself configured with one or more ILoggerProvider. Typowe dostawców są wysyłane w następujących pakietów:Common providers are shipped in the following packages:

Po zainstalowaniu odpowiednich pakietów, aplikacji, należy utworzyć pojedynczą/globalne wystąpienie 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 pojedyncze/globalne wystąpienie powinien zostać zarejestrowany podstawowych EF 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 bardzo ważne, aplikacje nie 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. W ten sposób spowoduje przeciek pamięci i pogorszenie wydajności.Doing so will result in a memory leak and poor performance.

Filtrowanie, co jest rejestrowaneFiltering what is logged

Najprostszym sposobem, aby filtrować, 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 jest odfiltrowana zwracać tylko komunikaty dziennika: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

Podstawowych EF rejestratora kategorie są określone w DbLoggerCategory klasę, aby ułatwić znajdowanie kategorii, ale te rozwiązania do prostych ciągów.For EF Core, logger categories are defined in the DbLoggerCategory class to make it easy to find categories, but these resolve to simple strings.

Więcej informacji na temat podstawowej infrastruktury rejestrowania można znaleźć w dokumentacji rejestrowanie platformy ASP.NET Core.More details on the underlying logging infrastructure can be found in the ASP.NET Core logging documentation.