ProtokollierungLogging

Tipp

Das in diesem Artikel verwendete Beispiel finden Sie auf GitHub.You can view this article's sample on GitHub.

ASP.NET Core-AnwendungenASP.NET Core applications

EF Core wird automatisch mit den Protokollierungsmechanismen von ASP.NET Core integriert. wenn AddDbContext oder AddDbContextPool verwendet wird.EF Core integrates automatically with the logging mechanisms of ASP.NET Core whenever AddDbContext or AddDbContextPool is used. Aus diesem Grund bei der Verwendung von ASP.NET Core Protokollierung sollte konfiguriert werden wie beschrieben in der ASP.NET Core-Dokumentation.Therefore, when using ASP.NET Core, logging should be configured as described in the ASP.NET Core documentation.

Andere AnwendungenOther applications

EF Core-Protokollierung derzeit muss ein "iloggerfactory" die selbst mit einem oder mehreren ILoggerProvider konfiguriert ist.EF Core logging currently requires an ILoggerFactory which is itself configured with one or more ILoggerProvider. Allgemeine Anbieter sind in den folgenden Paketen geliefert:Common providers are shipped in the following packages:

Nach der Installation die entsprechenden Pakete, sollte die Anwendung eine Singleton oder globale Instanz von einem "loggerfactory" erstellen.After installing the appropriate package(s), the application should create a singleton/global instance of a LoggerFactory. Verwenden Sie beispielsweise die konsolenprotokollierung:For example, using the console logger:

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

Diese Singleton oder globale Instanz sollte klicken Sie dann mit EF Core registriert werden, auf die DbContextOptionsBuilder.This singleton/global instance should then be registered with EF Core on the DbContextOptionsBuilder. Zum Beispiel: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");

Warnung

Es ist sehr wichtig, dass Anwendungen keine neue Instanz der "iloggerfactory" für jede Context-Instanz erstellen.It is very important that applications do not create a new ILoggerFactory instance for each context instance. Auf diese Weise führt zu einem Speicherverlust und schlechter Leistung.Doing so will result in a memory leak and poor performance.

Filtern von protokolliert werden sollFiltering what is logged

Die einfachste Möglichkeit zum Filtern der protokolliert werden soll, ist es zu konfigurieren, wenn die ILoggerProvider zu registrieren.The easiest way to filter what is logged is to configure it when registering the ILoggerProvider. Zum Beispiel:For example:

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

In diesem Beispiel wird das Protokoll gefiltert, um nur Nachrichten zurückzugeben:In this example, the log is filtered to return only messages:

  • in der Kategorie "Microsoft.EntityFrameworkCore.Database.Command"in the 'Microsoft.EntityFrameworkCore.Database.Command' category
  • auf der Ebene "Information"at the 'Information' level

Für EF Core die Protokollierungskategorien werden in definiert die DbLoggerCategory Klasse, um sie Kategorien, aber diese Suche nach zu vereinfachen, die in einfache Zeichenfolgen aufgelöst werden.For EF Core, logger categories are defined in the DbLoggerCategory class to make it easy to find categories, but these resolve to simple strings.

Weitere Informationen zu den zugrunde liegenden Infrastruktur für die Protokollierung befinden sich die Dokumentation zur ASP.NET Core-Protokollierung.More details on the underlying logging infrastructure can be found in the ASP.NET Core logging documentation.