LoginSignup
3
2

More than 3 years have passed since last update.

Entity Framework Core 2.2で実行SQLをNLogに出力する

Last updated at Posted at 2019-08-23

Nlogの出力方法や、EFCoreのログ出力方法はたくさんあるけど
意外とEFCore2.2でNLogに出力する方法が見当たらなかった為、書いておきます。

Entity Framework CoreでSQLの内容をログに出したい…

Google先生で色々見つけた方法を試すと、非推奨だのなんだの怒られてしまった。
どうも見つけたのがEF Core 2.0や2.1でのやり方だったみたい。

まず2.1とかはどういうコードなのか

private static readonly ILoggerFactory loggerFactory = 
new LoggerFactory(new[] { new ConsoleLoggerProvider((_, __) => true, true) });
optionsBuilder.UseLoggerFactory(loggerFactory)

こんな感じのコードがGoogle先生で良く引っかかってくると思う。
※↑はNLogじゃなくてコンソールに出ます。

じゃあ2.2だとどうやるの?

private static readonly ILoggerFactory LoggerFactory = new ServiceCollection().AddLogging(builder =>
    builder.AddProvider(new NLogLoggerProvider()).AddFilter(DbLoggerCategory.Database.Command.Name, LogLevel.Debug))
    .BuildServiceProvider().GetService<ILoggerFactory>();
optionsBuilder.UseLoggerFactory(LoggerFactory)

結構変わってますね。
「builder.AddProvider」部分ですが、ここに「NLogLoggerProvider」を渡すと
NLogに念願の実行SQLが出力されます!

※2019.08.27 修正
インスタンスを毎回生成するような作りになっていたためstaticプロパティに変更

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2