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プロパティに変更