22

我有一个同时使用实体框架和 Dapper 的应用程序。我想提供一个自定义记录器来注销通过 ado.net 连接发出的任何 sql。这样做的最佳方法是什么?

或者,如果不容易做到,那么困难到底是什么?

4

5 回答 5

7

ADO.NET 数据跟踪对您有用吗?它插入 ETW,您可以从中粘合当前的日志记录系统。不过好像不太独立。

于 2013-10-22T20:11:15.387 回答
5

Miniprofiler 由同一团队编写,可与 dapper 和 Entity Framework 一起使用——尽管 iirc 后者需要更多的工作。这提供了记录和分析 ADO.NET 命令的能力。我们在 stackoverflow(以及整个堆栈交换网络)上 24x7 使用它,因此即使在规模上也能正常工作。

于 2013-10-19T20:20:59.537 回答
4

Glimpse工具提供跟踪 SQL 调用(以及大量其他信息)的能力,并且正在由 ASP.NET 团队积极推广:http ://www.asp.net/mvc/overview/performance/profile-and -debug-your-aspnet-mvc-app-with-glimpse

于 2015-02-20T13:14:29.053 回答
1

利用SharpPcap API并在 SQL 运行的端口上侦听客户端 IP 和 SQL 服务器 IP 之间建立的连接。然后,您可以运行正则表达式或类似的方法来提取 SQL 命令。它们中的大多数都以INSERTUPDATESELECT或开头。一旦你有了字符串,就调用你现有的任何记录器并根据需要进行记录。您可以将其作为服务、由您的应用程序启动的第二个应用程序运行,甚至可以在第二个线程上从第一个应用程序中运行。它比管道低一点,但这只是给你更多的灵活性。您可以测试并与服务器上的 SQL 分析器/SQL 跟踪接收到的流量进行比较,以验证它是否有效。DELETEEXECADO

另一种选择是尝试修改 ADO.Net 代码的相关部分并插入日志记录。AfterThought https://github.com/vc3/Afterthought之类的工具可能是一种选择,尽管我认为这在除了最受控制的环境之外的所有环境中都会带来麻烦,尤其是白名单、AV、更新、版本控制等。

于 2013-10-22T01:12:15.567 回答
-4

您可以使用 log4net:http

://www.nuget.org/packages/log4net/ 我已经在几个大项目中使用它。非常有用,因为您可以指定要记录的内容/位置。
由于您要记录 SQL 语句,因此可以在数据访问层中放置一个日志。

于 2013-10-19T20:21:10.850 回答