ロギング

Oracle EF Coreは、EF Coreのロギング・メカニズムと直接統合されています。Oracle EF Coreのログは、DbLoggerCategoryクラスおよびLogLevel列挙を使用してフィルタ処理されます。

次のDbLoggerCategoryプロパティを使用して、ログをフィルタ処理できます。

  • Database

  • Database.Command

  • Database.Connection

  • DbLoggerCategory.Infrastructure

  • Migrations

  • Model

  • Model.Validation

  • Query

  • Scaffolding

  • Update

次のLogLevelプロパティを使用できます。

  • Debug: 入力および出力トレースが表示されます。実行されたSQL、表および列メタデータ、マッピングなどの主要なOracle EF Coreアクティビティおよびメタデータも表示されます。

  • Error: スタック・トレースなど、エラーに関連する情報が表示されます。

  • None

DebugLoggerProviderを使用してロギングを設定するには、プロジェクトにMicrosoft.Extensions.Logging.Debug.dllアセンブリを含めます。同様に、ConsoleLoggerProviderを使用してロギングを設定するには、プロジェクトにMicrosoft.Extensions.Logging.Console.dllアセンブリを含めます。その後、プロジェクトに次のネームスペースを追加します。

using Microsoft.Extensions.Logging;

次に、ロガー・ファクトリを使用するようにDbContextを構成します。

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder.UseOracle(@<connection string>)
        .UseLoggerFactory(_myLoggerFactory);
}

最後に、ログに書き込むDbLoggerCategoryおよびLogLevelプロパティを設定します。コード優先シナリオでは、次のLoggerFactoryを作成できます。

public static readonly Microsoft.Extensions.Logging.ILoggerFactory _myLoggerFactory =
    new LoggerFactory(new[] { new
Microsoft.Extensions.Logging.Debug.DebugLoggerProvider((category, level) =>
    // category == DbLoggerCategory.Database.Name && 
    // Filter the logs based on DbLoggerCategory. Comment this line above if you do not want to filter logs based on DbLoggerCategory.
    level >= LogLevel.Trace 
    // Filter the logs based on LogLevel. All levels greater than or equal to "Trace" will be enabled. Comment this line above if you do not want to filter logs based on LogLevel.
    )
    });

移行シナリオでは、次のLoggerFactoryを作成できます。

public static readonly Microsoft.Extensions.Logging.ILoggerFactory _myLoggerFactory =
    new LoggerFactory(new[] { new
Microsoft.Extensions.Logging.Console.ConsoleLoggerProvider((category, level) =>
    // category == DbLoggerCategory.Database.Name && 
    // Filter the logs based on DbLoggerCategory. Comment this line above if you do not want to filter logs based on DbLoggerCategory.
    level >= LogLevel.Trace 
    // Filter the logs based on LogLevel. All LogLevels greater than and equal to "Trace" will be enabled. Comment this line above if you do not want to filter logs based on LogLevel.
    , false, false)
    });

スキャフォールディング・シナリオでは、-verboseオプションを使用してトレースを生成します。

Scaffold-DbContext .. -verbose