ログの記録Logging

ヒント

この記事のサンプルは GitHub で確認できます。You can view this article's sample on GitHub.

ASP.NET Core アプリケーションASP.NET Core applications

ASP.NET Core のログ記録メカニズムと EF Core を自動的に統合されるたびにAddDbContextまたはAddDbContextPool使用されます。EF Core integrates automatically with the logging mechanisms of ASP.NET Core whenever AddDbContext or AddDbContextPool is used. したがって、ASP.NET Core を使用して、ログ記録する必要があります構成」の説明に従って、 ASP.NET Core ドキュメントします。Therefore, when using ASP.NET Core, logging should be configured as described in the ASP.NET Core documentation.

他のアプリケーションOther applications

EF Core の現在ログ記録では、1 つまたは複数の ILoggerProvider で構成されている自体が ILoggerFactory が必要です。EF Core logging currently requires an ILoggerFactory which is itself configured with one or more ILoggerProvider. 一般的なプロバイダーは、次のパッケージで出荷されます。Common providers are shipped in the following packages:

適切なパッケージをインストールした後、アプリケーションは、LoggerFactory のシングルトン/グローバル インスタンスを作成する必要があります。After installing the appropriate package(s), the application should create a singleton/global instance of a LoggerFactory. たとえば、コンソール ロガーを使用します。For example, using the console logger:

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

EF Core のこのシングルトン/グローバル インスタンスが登録し、必要がある、DbContextOptionsBuilderします。This singleton/global instance should then be registered with EF Core on the DbContextOptionsBuilder. 例えば: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");

警告

アプリケーションは、コンテキスト インスタンスごとに新しい ILoggerFactory インスタンスを作成しないことが非常に重要です。It is very important that applications do not create a new ILoggerFactory instance for each context instance. これは、メモリ リークとパフォーマンスの低下になります。Doing so will result in a memory leak and poor performance.

記録内容がフィルター処理Filtering what is logged

記録内容がフィルター処理する最も簡単な方法では、ILoggerProvider を登録するときに、これを構成します。The easiest way to filter what is logged is to configure it when registering the ILoggerProvider. 例えば:For example:

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

この例では、メッセージのみを返すため、ログをフィルター処理します。In this example, the log is filtered to return only messages:

  • 'Microsoft.EntityFrameworkCore.Database.Command' カテゴリin the 'Microsoft.EntityFrameworkCore.Database.Command' category
  • '情報' レベルでat the 'Information' level

EF Core 用ロガー カテゴリが定義されている、DbLoggerCategory単純な文字列を解決するには、カテゴリが、これらを見つけやすいようにするクラス。For EF Core, logger categories are defined in the DbLoggerCategory class to make it easy to find categories, but these resolve to simple strings.

詳細については、基になるログ記録インフラストラクチャが記載されて、 ASP.NET Core のログ記録に関するドキュメントします。More details on the underlying logging infrastructure can be found in the ASP.NET Core logging documentation.