我有一个使用Entity Framework和Dapper的应用程序。我想提供一个自定义记录器来注销通过ado.net连接发出的任何sql。这样做的最佳方式是什么?
或者,如果不容易发生什么困难呢?
答案 0 :(得分:7)
ADO.NET Data Tracing会为你效劳吗?它插入ETW,您可以从中粘贴当前的日志记录系统。虽然看起来并不多见。
答案 1 :(得分:5)
Miniprofiler由同一个团队编写,适用于dapper和Entity Framework - 尽管iirc后者需要位更多的工作。这提供了对ADO.NET命令进行日志记录和分析的功能。我们在stackoverflow(以及整个堆栈交换网络)上全天候使用它,因此即使在规模上也能很好地工作。
答案 2 :(得分:4)
Glimpse工具提供跟踪SQL调用的能力(以及大量其他信息),并由ASP.NET团队积极推广:http://www.asp.net/mvc/overview/performance/profile-and-debug-your-aspnet-mvc-app-with-glimpse
答案 3 :(得分:1)
利用SharpPcap API并侦听SQL运行的端口上客户端IP和SQL Server IP之间建立的连接。然后,您可以运行正则表达式等来提取SQL命令。其中大部分内容都以INSERT
,UPDATE
,SELECT
,DELETE
或EXEC
开头。一旦你有字符串调用你所拥有的任何记录器并根据需要进行记录。您可以将其作为服务运行,应用程序启动的第二个应用程序,甚至是第二个线程中的第一个应用程序。它比ADO
管道稍微低一些,但这只会给你更多的灵活性。您可以测试并与服务器上的SQL事件探查器/ SQL跟踪收到的流量进行比较,以验证它是否有效。
另一种方法是尝试修改ADO.Net代码的相关部分并插入日志记录。像AfterThought https://github.com/vc3/Afterthought这样的工具可能是一种选择,虽然我认为除了最受控制的环境之外,其他所有环境都有问题,特别是白名单,AV,更新,版本控制等。
答案 4 :(得分:-3)
您可以使用log4net:http://www.nuget.org/packages/log4net/
我一直在几个大项目中使用它。非常有用,因为您可以指定要记录的内容/位置
由于您要记录SQL语句,因此可以将日志放入数据访问层。