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 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, la journalisation doit être configurée comme décrit dans la documentation d’ASP.NET Core.Therefore, when using ASP.NET Core, logging should be configured as described in the ASP.NET Core documentation.

Autres applicationsOther applications

Core EF journalisation actuellement requiert 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 inclus dans les packages suivants :Common providers are shipped in the following packages:

Après avoir installé l’ou les modules approprié, 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, à l’aide de l’enregistreur d’événements de la console :For example, using the console logger:

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

Cette instance de singleton/global doit être inscrits avec EF de base sur la 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 de performances médiocres.Doing so will result in a memory leak and poor performance.

Filtrage des éléments enregistrésFiltering what is logged

Pour filtrer les éléments enregistrés, 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 « Informations »at the 'Information' level

Pour EF Core, les catégories de l’enregistreur d’événements sont définies dans le DbLoggerCategory classe pour faciliter le travail rechercher des catégories, mais ces résoudre en 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 de journalisation ASP.NET Core.More details on the underlying logging infrastructure can be found in the ASP.NET Core logging documentation.