ef mysql跟踪sql语句_EF Core 日志跟踪sql语句

EF Core 日志跟踪sql语句

1.新增自定义ILoggerProvider实现类

public class EFLoggerProvider : ILoggerProvider

{

public ILogger CreateLogger(string categoryName) => new EFLogger(categoryName);

public void Dispose() { }

}

2.新增自定义日志处理接口ILogger的实现

public class EFLogger : ILogger

{

private readonly string categoryName;

public EFLogger(string categoryName) => this.categoryName = categoryName;

public bool IsEnabled(LogLevel logLevel) => true;

public void Log(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func 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 state) => null;

}

3.配置DbContext的日志记录

方式一,在DbContext的OnConfiguration中配置

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {

var loggerFactory = new LoggerFactory();

loggerFactory.AddProvider(new EFLoggerProvider());

optionsBuilder.UseLoggerFactory(loggerFactory);

base.OnConfiguring(optionsBuilder);

}

方式二(AspNet Core),在Startup的ConfigureService中配置

services.AddDbContext(r => {

//使用ef core mysql 连接

var loggerFactory = new LoggerFactory();

loggerFactory.AddProvider(new EFLoggerProvider());

r.UseMySQL(Configuration.GetConnectionString("your db connection string"))

.UseLoggerFactory(loggerFactory);

});

运行 得到效果如图:

ef mysql跟踪sql语句_EF Core 日志跟踪sql语句_第1张图片

.NET Core实用技巧(一)如何将EF Core生成的SQL语句显示在控制台中

目录 .NET Core实用技巧(一)如何将EF Core生成的SQL语句显示在控制台中 前言 笔者最近在开发和维护一个.NET Core项目,其中使用几个非常有意思的.NET Core相关的扩展,在 ...

EF Core中执行Sql语句查询操作之FromSql,ExecuteSqlCommand,SqlQuery

一.目前EF Core的版本为V2.1 相比较EF Core v1.0 目前已经增加了不少功能. EF Core除了常用的增删改模型操作,Sql语句在不少项目中是不能避免的. 在EF Core中上下文 ...

DbCommandInterceptor抓取EF执行时的SQL语句

EF6.1也出来不少日子了,6.1相比6.0有个很大的特点就是新增了System.Data.Entity.Infrastructure.Interception 命名空间,此命名空间下的对象可以允许我 ...

oracle跟踪sql语句

oracle跟踪sql语句 select * from v$sql 查询客户端电脑名称的ID select terminal, SID,SERIAL#  from v$session where  ( ...

mybatis日志,打印sql语句,输出sql

mybatis日志,打印sql语句,输出sql..

通过SQL Server的扩展事件来跟踪SQL语句在运行时,时间都消耗到哪儿了?

原文:通过SQL Server的扩展事件来跟踪SQL语句在运行时,时间都消耗到哪儿了? 问题就是,一个很简单的语句,在不同的服务器上执行,所需要的时间相差很大,特别提到在性能差的服务器上反而快,在性能 ...

Asp.Net MVC EF之一:使用Database类在EF框架中执行Sql语句

引言 从EF6开始,增加了DateBase类,他通过从 DbContext 对象获取此类的实例.可用于管理支持数据库上下文或连接的实际数据库.这包括创建.删除和检查数据库的存在. 在6以前,我们使用E ...

EF 记录执行的sql语句

最近做了个中等的项目,数据不会很多,开发时间比较紧迫,所以用了EF的框架. 在使用过程中,发现有时候执行的结果不如预期,想看看执行的sql语句为何,遍查找资料,在网上找到了相关辅助类,拿来使用,部署到 ...

随机推荐

A*算法——启发式搜索

A*算法 本质还是搜索:加了优化而已 关于这个优化,听到两种说法: 1.剪枝 通过判断预计最少还要几步,加强版剪枝 比如说一个经典剪枝: 如果 步数≥已知最小值 则 剪枝 升级| V 如果 步数+最少 ...

[转]C#综合揭秘——细说进程、应用程序域与上下文之间的关系

引言 本文主要是介绍进程(Process).应用程序域(AppDomain)..NET上下文(Context)的概念与操作.虽然在一般的开发当中这三者并不常用,但熟悉三者的关系,深入了解其作用,对提高 ...

苹果MAC中安装并搭建Android开发环境的详细步骤

Android的开发平台搭建主要需要的工具有:Java虚拟机JDK.Eclipse.Eclipse插件ADT(Android Developer Tool)和Android开发包SDK,以下是具体的安 ...

万能js实现翻页,动态生成内容自动翻页,兼容各种浏览器(已测试)----神器版!

转--http://www.2cto.com/kf/201402/277535.html 万能js实现翻页,动态生成内容自动翻页,兼容各种浏览器(已测试)----神器版! 2014-02-11     ...

ztree使用系列四(ztree实现同级拖拽排序并将排序结果保存数据库)

ztree这个系列的最后一篇,也是ztree功能强大的体现之中的一个--排序功能. ztree能够实现全部节点之间任意的拖拽排序功能.我这里依据须要实现了仅仅同意同级之间任意拖拽排序,事实上原理都一样 ...

HDU 3037 Saving Beans (Lucas法则)

主题链接:pid=3037">http://acm.hdu.edu.cn/showproblem.php?pid=3037 推出公式为C(n + m, m) % p. 用Lucas定理 ...

bzoj1298题解

[题意分析] 要求设计一组n个m面的骰子,使每一个骰子i对骰子a[i]的胜率都大于50%. [算法分析] 对于每个i,连一条从i指向a[i]的边,那么题目给出的关系构成了一个有向基环树森林. 对于树上 ...

ASP.NET 基础多文件上传

多图上传 [HttpPost] public string duo() { ///.net 多文件上传 获取文件的集合 HttpFileCollection files = HttpConte ...

PHP快速排序(递归)

日常的排序算法中,快速排序是其中一种.实现起来相对简单. 假设有一个数组,有若干(N)个元素(数字且无序),需要对其进行从小到大的排序. 快速排序的思路是怎么样的呢? 取一个中间值,然后,用其他数组元 ...

mybatis逆向工程自动生成实体类、接口以及映射Mapper.xml配置文件

Mybatis的逆向工程非常简单,只要一个配置文件和一个Main方法就可以实现,下面以maven工程为例: (1)在pom.xml中引入依赖包

你可能感兴趣的:(ef,mysql跟踪sql语句)