JournalisationLogging

Conseil

Vous pouvez afficher cet exemple sur GitHub.You can view this article's sample on GitHub.

Applications ASP.NET CoreASP.NET Core applications

EF Core s’intègre automatiquement avec les mécanismes de journalisation d’ASP.NET Core chaque fois que AddDbContext ou AddDbContextPool est utilisé.EF Core integrates automatically with the logging mechanisms of ASP.NET Core whenever AddDbContext or AddDbContextPool is used. Par conséquent, lorsque vous utilisez ASP.NET Core, journalisation doit être configurée comme décrit dans la documentation ASP.NET Core.Therefore, when using ASP.NET Core, logging should be configured as described in the ASP.NET Core documentation.

Autres applicationsOther applications

EF Core journalisation actuellement nécessite un ILoggerFactory qui est lui-même configuré avec un ou plusieurs ILoggerProvider.EF Core logging currently requires an ILoggerFactory which is itself configured with one or more ILoggerProvider. Fournisseurs courants sont fournis dans les packages suivants :Common providers are shipped in the following packages:

Après avoir installé les packages appropriés, l’application doit créer une instance de singleton/globale d’un LoggerFactory.After installing the appropriate package(s), the application should create a singleton/global instance of a LoggerFactory. Par exemple, utilisez le journal de console :For example, using the console logger:

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

Cette instance de singleton/globale doit être inscrits avec EF Core sur le DbContextOptionsBuilder.This singleton/global instance should then be registered with EF Core on the DbContextOptionsBuilder. Exemple :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");

Avertissement

Il est très important que les applications ne créent pas une nouvelle instance de ILoggerFactory pour chaque instance de contexte.It is very important that applications do not create a new ILoggerFactory instance for each context instance. Cela entraîne une fuite de mémoire et des performances médiocres.Doing so will result in a memory leak and poor performance.

Filtrage de ce qui est enregistréFiltering what is logged

Pour filtrer ce qui est enregistré, le plus simple consiste à configurer lors de l’inscription de l’ILoggerProvider.The easiest way to filter what is logged is to configure it when registering the ILoggerProvider. Exemple :For example:

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

Dans cet exemple, le journal est filtré pour retourner uniquement les messages :In this example, the log is filtered to return only messages:

  • dans la catégorie « Microsoft.EntityFrameworkCore.Database.Command »in the 'Microsoft.EntityFrameworkCore.Database.Command' category
  • au niveau des « Informations »at the 'Information' level

Pour EF Core, les catégories de l’enregistreur d’événements sont définies dans le DbLoggerCategory résoudre les classe pour le rendre plus faciles à trouver les catégories, mais ces chaînes simples.For EF Core, logger categories are defined in the DbLoggerCategory class to make it easy to find categories, but these resolve to simple strings.

Vous trouverez plus d’informations sur l’infrastructure sous-jacente de la journalisation dans le documentation sur la journalisation ASP.NET Core.More details on the underlying logging infrastructure can be found in the ASP.NET Core logging documentation.