ログLogging

ヒント

この記事を表示するサンプルGitHub でします。You can view this article's sample on GitHub.

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

ASP.NET Core のログ記録機構と自動的に統合し、EF コアされるたびにAddDbContextまたはAddDbContextPoolを使用します。EF Core integrates automatically with the logging mechanims 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 コアの現在のログ記録には、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 コア上、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.