EF Code 如何输出sql语句
时间:2021-07-01 10:21:17
帮助过:218人阅读
class EFLoggerProvider : ILoggerProvider
{
public ILogger CreateLogger(
string categoryName) =>
new EFLogger(categoryName);
public void Dispose() { }
}
public class EFLogger : ILogger
{
private readonly string categoryName;
public EFLogger(
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执行数据库查询时的categoryName为Microsoft.EntityFrameworkCore.Database.Command,日志级别为Information
if (categoryName ==
"Microsoft.EntityFrameworkCore.Database.Command"
&& logLevel ==
LogLevel.Information)
{
var logContent =
formatter(state, exception);
//TODO: 拿到日志内容想怎么玩就怎么玩吧
Console.WriteLine();
Console.ForegroundColor =
ConsoleColor.Green;
Console.WriteLine(logContent);
Console.ResetColor();
}
}
public IDisposable BeginScope<TState>(TState state) =>
null;
}
然后在dbcontext里面,应用日志
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var loggerFactory = new LoggerFactory();
loggerFactory.AddProvider(new EFLoggerProvider());
optionsBuilder.UseLoggerFactory(loggerFactory);
base.OnConfiguring(optionsBuilder);
}
EF Code 如何输出sql语句
标签:builder erp framework for gre ros name tst ext