【Entity Framework Core】SQLクエリのログ出力

【Entity Framework Core】SQLクエリのログ出力

Entity Framework Coreから発行されたSQLクエリをLogToメソッドを使用したログ出力します。

<環境>
Windows10
.Net7
Entity Framework Core Version 7.0.3
Microsoft SQL Server 2022 Developer Edition (64-bit)

LogToメソッドの実装例

DbContext派生クラスのOnConfiguringメソッド内でDbContextOptionsBuilder.LogToメソッドを使用して、SQLクエリをログ出力できます。

コード
以下の例はコンソールウィンドウにログレベルInfomationでログ出力します。

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;

public class MyContext : DbContext
{
    public DbSet<Product> Products { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder options)
    {
        // LogToメソッドを使用
        options.LogTo(Console.WriteLine, LogLevel.Information)
            .UseSqlServer("Data Source=localhost;Initial Catalog=TestEFCoreLogDB;Integrated Security=True;TrustServerCertificate=True;");
    }
}

出力結果

EntityFrameworkCore SQLクエリのログ出力例

LogToメソッドの引数指定

LogToメソッドは引数にログ出力先やログレベル、ログカテゴリなどを指定できます。以下にいくつか例を記載します。

ログ出力先の指定


コンソールウィンドウにログ出力する
Console.WriteLineを指定します。
options.LogTo(Console.WriteLine)

デバッグウィンドウにログ出力
.WriteLineを指定します。
options.LogTo(s=>Debug.WriteLine(s))

ファイルにログ出力
StreamWriterのような.Net標準ライブラリやNLog、Serilogなどのログライブラリも使用可能です。
options.LogTo(_nlog.Info)


ログレベルの指定

LogToメソッドの引数にログレベル(Logging.LogLevel)を指定すると、不要なログをフィルタリングできます。
指定可能なログレベルの種類を記載します。

ログレベルの種類
種類 出力内容
LogLevel.Trace 最も詳細なログを出力する
LogLevel.Debug 開発時のログを出力する
LogLevel.Information アプリケーションの処理フローがわかるログを出力する
LogLevel.Warning 異常または予期せぬ事象のログを出力する
LogLevel.Critical 回復不可能な致命的なエラー発生のログを出力する
LogLevel.None ログ出力しない


ログカテゴリの指定

LogToメソッドの引数にログカテゴリ(DbLoggerCategory)を指定すると、不要なログをフィルタリングできます。ログカテゴリの使用例と種類をいくつか記載します。

ログカテゴリの使用例
options.LogTo(
    Console.WriteLine,
    new[] { DbLoggerCategory.Update.Name },  // ログカテゴリ指定
    LogLevel.Debug)

EntityFrameworkCore SQLクエリログ出力 ログカテゴリ指定例


ログカテゴリの種類
種類 出力内容
Database.Command DBに発行したSQLステートメント(SQLクエリを含む)に関連するログカテゴリ
Database.Connection DB接続操作に関連するログカテゴリ
Database.Transaction DBトランザクションに関連するログカテゴリ
Migration マイグレーションに関連するログカテゴリ
Update DbContext.SaveChanges()のログカテゴリ


ログオプション

LogToメソッドの引数にログオプション(DbContextLoggerOptions)を指定すると、メッセージの1行目に出力する内容を変更できます。ログオプションの使用例と種類をいくつか記載します。

ログオプションの使用例
options.LogTo(
    Console.WriteLine,
    LogLevel.Information,
    DbContextLoggerOptions.LocalTime)    // ログオプション

EntityFrameworkCore SQLクエリログ出力 ログオプション指定例


ログオプションの種類
種類 出力内容
Category ログカテゴリを出力
LocalTime ローカル時で出力
UtcTime 協定世界で出力
SingleLine 1行のみログ出力

パラメータ設定値を出力

DbContextOptionsBuilderクラスのEnableSensitiveDataLoggingメソッドを使用すると、SQLクエリのパラメータ設定値が出力できます。
options.LogTo(Console.WriteLine, LogLevel.Information ,DbContextLoggerOptions.LocalTime)
    .EnableSensitiveDataLogging()     // EnableSensitiveDataLoggingメソッドの指定 
    .UseSqlServer("Data Source=localhost;Initial Catalog=TestEFCoreLogDB;Integrated Security=True;TrustServerCertificate=True;");

EnableSensitiveDataLoggingメソッドあり
パラメータの設定値が表示されます。

EntityFrameworkCore SQLクエリログ出力 EnableSensitiveDataLoggingあり

EnableSensitiveDataLoggingメソッドなし
パラメータの設定値が非表示になります。

EntityFrameworkCore SQLクエリログ出力 EnableSensitiveDataLoggingなし


Next Post Previous Post