You can Create a custom LoggerFactory for DI
LoggerFacotry
internal class EFCoreLoggerFactory : LoggerFactory
{
public EFCoreLoggerFactory() : base()
{
base.AddProvider(new EFCoreLoggerProvider());
}
}
ILoggerProvider
internal class EFCoreLoggerProvider : ILoggerProvider
{
public ILogger CreateLogger(string categoryName) => new EFCoreLogger(categoryName);
public void Dispose() { }
}
ILogger
internal class EFCoreLogger : ILogger
{
private readonly string _categoryName;
public EFCoreLogger(string categoryName) => this._categoryName = categoryName;
public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, System.Exception exception, Func<TState, System.Exception, string> formatter)
{
if (_categoryName == DbLoggerCategory.Database.Command.Name && logLevel == LogLevel.Information)
{
var logContent = formatter(state, exception);
//**Change the log way you want**
Console.WriteLine(logContent);
System.Diagnostics.Trace.WriteLine(logContent);
}
}
public bool IsEnabled(LogLevel logLevel) => true;
public IDisposable BeginScope<TState>(TState state) => null;
}
Enable LoggerFactory in your DBContext:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.EnableSensitiveDataLogging(true); //Enable paramters in log
optionsBuilder.UseLoggerFactory(new EFCoreLoggerFactory());
base.OnConfiguring(optionsBuilder);
}