ProtokollierungLogging

Tipp

Sie können anzeigen, dass dieser Artikel Beispiel auf GitHub.You can view this article's sample on GitHub.

ASP.NET Core-AnwendungenASP.NET Core applications

EF Core wird automatisch in die Protokollierung Mechanims von ASP.NET Core integriert, wenn AddDbContext oder AddDbContextPool verwendet wird.EF Core integrates automatically with the logging mechanims of ASP.NET Core whenever AddDbContext or AddDbContextPool is used. Daher bei der Verwendung von ASP.NET Core Protokollierung sollten konfiguriert werden wie beschrieben in der Dokumentation zu ASP.NET Core.Therefore, when using ASP.NET Core, logging should be configured as described in the ASP.NET Core documentation.

Andere AnwendungenOther applications

EF Core derzeit Protokollierung erfordert ein iloggerfactory-Standardobjekt zur 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/globale Instanz von einem LoggerFactory erstellen.After installing the appropriate package(s), the application should create a singleton/global instance of a LoggerFactory. Verwenden z. B. die konsolenprotokollierung:For example, using the console logger:

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

Diese Singleton/globale Instanz sollte dann mit EF-Kern-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 eine neue Instanz der iloggerfactory-Standardobjekt zur für jede Kontextinstanz keine 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 eine schlechte 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, wird beim Registrieren der ILoggerProvider zu konfigurieren.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ückgeben: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-Kern, Protokollierung Kategorien definiert sind, der DbLoggerCategory Klasse, um die Kategorien, doch diese suchen zu erleichtern, die sich in einfache Zeichenfolgen auflösen lassen.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 finden Sie der Dokumentation zu ASP.NET Core Protokollierung.More details on the underlying logging infrastructure can be found in the ASP.NET Core logging documentation.