关于EF输出sql的执行日志

sqlserver中可以使用sql profiler;但是mysql当中无法查看;只能借助于组件;

ADO.NET Entity Framework CodeFirst 如何输出日志(EF4.3) 用的EFProviderWrappers ,这个组件好久没有更新了,对于SQL执行日志的解决方案的需求是杠杠的,今天给大家介绍一个更好的组件Clutch.Diagnostics.EntityFramework,可以通过Nuget 获取:

这个框架定义了一个接口 IDbTracingListener:

namespace Clutch.Diagnostics.EntityFramework
{

  public interface IDbTracingListener
  {

    void CommandExecuting(DbTracingContext context);

    void CommandFinished(DbTracingContext context);

    void ReaderFinished(DbTracingContext context);

    void CommandFailed(DbTracingContext context);

    void CommandExecuted(DbTracingContext context);

  }
}
实现这个接口,添加一个类,里面实现自己的SQL 日志记录:
using System;
using System.Data.Common;
using System.Diagnostics;
using Clutch.Diagnostics.EntityFramework;

/// <summary>
/// Implementation of IDbTracingListener Class is used for tracing all SQL Queries to the entity framework database
/// </summary>
public class DbTracingListener : IDbTracingListener
{
    public void CommandExecuted(DbConnection connection, DbCommand command, object result, TimeSpan duration)
    {
        Debug.WriteLine(command.CommandText);
        Debug.WriteLine(string.Format("Executed in: {0}", duration));
    }

    public void CommandExecuting(DbConnection connection, DbCommand command)
    {

    }

    public void CommandFailed(DbConnection connection, DbCommand command, Exception exception, TimeSpan duration)
    {

    }

    public void CommandFinished(DbConnection connection, DbCommand command, object result, TimeSpan duration)
    {

    }
}

在方法内部通过 context.Command.CommandText 可以获得你的ef的sql命令的内容。

然后在程序的入口启用SQL日志输出实现:

// Enable Tracing queries
DbTracing.Enable();
// Adding the listener (implementation of IDbTracingListener)
DbTracing.AddListener(new DbTracingListener());
时间: 2024-12-16 11:32:57

关于EF输出sql的执行日志的相关文章

在使用hibernate的getHibernateTemplate()时怎么让控制台输出封装好的SQL? 怎么用日志打印出来?

我们在使用 Hibernate 时一般只会关注是否显示生成的 SQL 语句,不过有些时候还不够.默认时 Hibernate 执行的 SQL 语句是打印在控制台上的,它也可以配置为输出给 Log4J 或是 Log4Back,还能显示出更详细的参数和取值信息.这里简单讲来. Hibernate 的配置文件 hibernate.cfg.xml 里提供有三个有关显示 SQL 的配置项,如果是与 Spring 联合,也可以配置到 Spring 的配置中.它们的取值是 boolean 值. 1) hiber

配置p6spyLog输出sql完整日志

第一步: 配置maven <dependency> <groupid>p6spy</groupid> <artifactid>p6spy</artifactid> <version>3.6.0</version> </dependency> <dependency> <groupid>com.alibaba</groupid> <artifactid>druid&

ibatis配置log4j输出sql日志信息

为了在开发过程更加直观,我们需要将ibatis日志打开以便观察ibatis运作的细节. ibatis采用Apache common_logging,并结合Apache log4j作为日志输出组件. 在CLASSPATH中新建log4j.properties配置文件,内容如下: log4j.rootLogger=DEBUG,stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layo

设置 sqlserver Profiler 只监控 EF的sql执行请求

当我们用EF执行语句的时候,可以使用 sqlserver Profiler来监控到底执行了哪些sql语句,但是默认他是监控全局的,我们只想监控Ef的语句,这里如下设置 这样就只会监控 EF产生的 sql语句了 设置 sqlserver Profiler 只监控 EF的sql执行请求

让Ef.DbContext输出SQL

1.在YourDbContext构造函数中配置Database.Log. 1 public partial class XxxEntities: DbContext 2 { 3 public XxxEntities() 4 : base("name=XxxEntities") 5 { 6 System.Diagnostics.Debug.WriteLine("--实例化DbContext--"); 7 Database.Log = x => { System.

linux下打开、关闭tomcat,实时查看tomcat执行日志

?? 启动:通常是运行sh tomcat/bin/startup.sh 停止:通常是运行sh tomcat/bin/shutdown.sh脚本命令 查看:运行ps -ef |grep tomcat 输出例如以下 *** 5144   .. .等等.Bootstrap start 说明tomcat已经正常启动. 5144 就为进程号 pid = 5144 杀死:kill -9 5144 ------------------------linux下实时查看tomcat执行日志------------

在MySQL中使用explain查询SQL的执行计划

1.什么是MySQL执行计划 要对执行计划有个比较好的理解,需要先对MySQL的基础结构及查询基本原理有简单的了解. MySQL本身的功能架构分为三个部分,分别是 应用层.逻辑层.物理层,不只是MySQL ,其他大多数数据库产品都是按这种架构来进行划分的. 应用层,主要负责与客户端进行交互,建立链接,记住链接状态,返回数据,响应请求,这一层是和客户端打交道的. 逻辑层,主要负责查询处理.事务管理等其他数据库功能处理,以查询为例. 首先接收到查询SQL之后,数据库会立即分配一个线程对其进行处理,第

MS SQL 监控错误日志的告警信息

SQL Server的错误消息(Error Message)按照消息的严重级别一共划分25个等级,级别越高,表示严重性也越高.但是如果你统计sys.messages,你会发现,实际上只有16(SQL SERVER 2008/2012)或17个(SQL SERVER 2005)个级别.猜测应该是一些留作扩展用,一些留作用户自定义错误消息的级别. sys.messages中有个字段is_event_logged,取值为1时表示出现错误时将消息记入事件日志. 对于 message_id 中的所有消息语

Oracle导入SQL脚本执行和常用命令

在SQL_PLUS里面执行: sql>@full_path/test.sql;  例:sql>@D:/test.sql;  不需要commit; 一般都是在test.sql 里面最后加上一个commit; 但是需要注意的是:在test.sql文件里面每条语句后必须加上";",代表一条语句的执行. 常用操作: [email protected]命令调用当前目录下的,或指定全路径,或可以通过SQLPATH环境变量搜寻到的脚本文件.该命令使用是一般要指定要执行的文件的全路径,否则