環境:
Visual Studio 2019
.netCore 3.1
Microsoft.EntityFrameworkCore 3.1.5 系
NLog 4.7.2
SQLite 3
この環境で EFCore の 実行SQLログが出なくて相当悩んだ…
結果、GitHub をいろいろな条件で検索しまくった結果下記の状態で出力できた。
てか、バージョン上がったらまた出せなくなるのかな…orz
行きついたサイトは3をターゲットにしていて、
builder.AddDebug() とか builder.AddConsole()
とか書いてあるけど、builderクラスの候補に、AddDebugも、AddConsoleも出てこないんだよなぁ…
なんでだろう…なくなったのかね…?
2021年02月05日追記
コメントにて教えて頂きました!
下記ライブラリが足りてなかったっぽいですね。助かりました!
NuGetで
Microsoft.Extensions.Logging.Debug
Microsoft.Extensions.Logging.Console
しかしソースが見にくい…
いい加減ブログサイト変えないとだめかね…?orz
MyContext.cs クラス(DbContext を継承したクラス) 必要な処理以外は消してます
LoggerProvider.cs クラス (実際のログ出力クラスを取得するクラス) これだけです。ソースを省いていません
LoggerSQL クラス(実際にログを出力するクラス) これだけです。 ソースを省いていませんが各自カスタマイズしてください
NLog.config (一応)
検索用:EntityFrameworkCore Entity Framework Core .net Core 3.1 NLog SQL 実行SQL ログ 出力 出力方法 出来ない 出ない 出し方
Visual Studio 2019
.netCore 3.1
Microsoft.EntityFrameworkCore 3.1.5 系
NLog 4.7.2
SQLite 3
この環境で EFCore の 実行SQLログが出なくて相当悩んだ…
結果、GitHub をいろいろな条件で検索しまくった結果下記の状態で出力できた。
てか、バージョン上がったらまた出せなくなるのかな…orz
行きついたサイトは3をターゲットにしていて、
builder.AddDebug() とか builder.AddConsole()
とか書いてあるけど、builderクラスの候補に、AddDebugも、AddConsoleも出てこないんだよなぁ…
なんでだろう…なくなったのかね…?
2021年02月05日追記
コメントにて教えて頂きました!
下記ライブラリが足りてなかったっぽいですね。助かりました!
NuGetで
Microsoft.Extensions.Logging.Debug
Microsoft.Extensions.Logging.Console
しかしソースが見にくい…
いい加減ブログサイト変えないとだめかね…?orz
MyContext.cs クラス(DbContext を継承したクラス) 必要な処理以外は消してます
using Microsoft.Extensions.Logging; protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { // DBログ出力 var loggerFactory = LoggerFactory.Create(builder => { builder.AddProvider(new LoggerProvider()) // DBログとDBログレベルを制限してSQLのみにする(なぜInfoなのさ…) .AddFilter((category, level) => category == DbLoggerCategory.Database.Command.Name && level == LogLevel.Information); }); // DB接続先指定 var connectionString = new SqliteConnectionStringBuilder { DataSource = ”./DataBase.db”}.ToString(); optionsBuilder.UseSqlite(new SqliteConnection(connectionString)) .EnableSensitiveDataLogging() .UseLoggerFactory(loggerFactory); // ここでログファクトリを指定 }
LoggerProvider.cs クラス (実際のログ出力クラスを取得するクラス) これだけです。ソースを省いていません
using Microsoft.Extensions.Logging; class LoggerProvider : ILoggerProvider { public ILogger CreateLogger(string className) { // 実際にログを出力するクラスを指定 return new LoggerSQL(); } public void Dispose() { } }
LoggerSQL クラス(実際にログを出力するクラス) これだけです。 ソースを省いていませんが各自カスタマイズしてください
using Microsoft.Extensions.Logging; using System; class LoggerSQL : ILogger { /// <summary> /// NLogクラス /// </summary> private readonly NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger(); public IDisposable BeginScope<TState>(TState state) { return null; } public bool IsEnabled(LogLevel logLevel) { bool result = false; if (Logger.IsDebugEnabled) { // SQLログはデバッグの時のみ出力したい result = true; } return result; } public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter) { // SQLはDebugとして出力する Logger.Debug(exception, formatter(state, exception)); } }
NLog.config (一応)
<?xml version="1.0" encoding="utf-8" ?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd" autoReload="true" throwExceptions="false" internalLogLevel="Off" internalLogFile="./logs/nlog-internal.log"> <targets async="true"> <target xsi:type="Debugger" name="LogConsole" layout="${longdate} [${uppercase:${level:padding=-5}}] ${message} ${exception:format=Message, Type, ToString:separator=\r\n}" /> </targets> <rules> <logger name="*" minlevel="Debug" writeTo="LogConsole" /> </rules> </nlog>
検索用:EntityFrameworkCore Entity Framework Core .net Core 3.1 NLog SQL 実行SQL ログ 出力 出力方法 出来ない 出ない 出し方
Microsoft.Extensions.Logging.Debug
Microsoft.Extensions.Logging.Console
なるほど、それが無かったんですね!
こんな苦労する事なかったのか…orz
ありがとうございます!