EF Core 3.1
1.新建EFCoreLogger類,繼承ILogger
public class EFCoreLogger : ILogger
{
private readonly string categoryName;
public EFCoreLogger(string categoryName) => this.categoryName = categoryName;
public bool IsEnabled(LogLevel logLevel) => true;
public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
{
//EF Core執行SQL語句時的categoryName爲Microsoft.EntityFrameworkCore.Database.Command,日誌級別爲Information
if (categoryName == "Microsoft.EntityFrameworkCore.Database.Command" && logLevel == LogLevel.Information)
{
var logContent = formatter(state, exception);
//寫入文本中
LogHelper.Log("SqlLog", "【SQL語句】:" + logContent);
}
}
public IDisposable BeginScope<TState>(TState state) => null;
}
2.新建EFCoreLoggerProvider,繼承ILoggerProvider
public class EFCoreLoggerProvider : ILoggerProvider
{
public ILogger CreateLogger(string categoryName) => new EFCoreLogger(categoryName);
public void Dispose() { }
}
3.在DbContext的OnConfiguring方法,設置日誌寫入
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var loggerFactory = new LoggerFactory();
loggerFactory.AddProvider(new EFCoreLoggerProvider());
optionsBuilder.UseSqlServer(ConnectionString).UseLoggerFactory(loggerFactory);
}
看看,效果
成功了,但是,參數都是?,添加EnableSensitiveDataLogging即可,啓用敏感數據記錄
optionsBuilder.UseSqlServer(ConnectionString).UseLoggerFactory(loggerFactory).EnableSensitiveDataLogging();
現在參數了
參考:
https://docs.microsoft.com/zh-cn/ef/core/miscellaneous/logging?tabs=v3