【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;");
}
}
出力結果
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)
ログカテゴリの種類
種類 | 出力内容 |
---|---|
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) // ログオプション
ログオプションの種類
種類 | 出力内容 |
---|---|
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メソッドあり
パラメータの設定値が表示されます。
EnableSensitiveDataLoggingメソッドなし
パラメータの設定値が非表示になります。