[c#] Как захватить весь SQL, отправленный через Ado.Net


1 Answers

Miniprofiler, написанный той же командой, работает как с dapper, так и с Entity Framework, хотя iirc более поздняя требует немного больше работы. Это обеспечивает возможность ведения журналов и профилирования команд ADO.NET. Мы используем его 24x7 здесь, в stackoverflow (и всей сети обмена стеками), поэтому он работает хорошо даже в масштабе.

Question

У меня есть приложение, которое использует как Entity Framework, так и Dapper. Я хотел бы предоставить произвольный регистратор для выхода из любого sql, который выдается через соединение ado.net. Каков наилучший способ сделать это?

Альтернативно, если нелегко, какие именно трудности?




Воспользуйтесь API SharpPcap и прослушайте соединения, установленные между IP-адресом клиента и IP-сервером SQL на порту, который выполняется SQL. Затем вы можете запустить либо регулярное выражение, либо подобное, чтобы извлечь команды SQL. Большинство из них начнутся с INSERT , UPDATE , SELECT , DELETE или EXEC . После того, как у вас есть строка, вызовите любой регистратор, который у вас есть, и запишите журнал по мере необходимости. Вы можете запустить это как услугу, второе приложение, запущенное вашим приложением, или даже с первого на второй поток. Это немного ниже, чем ADO но это дает вам больше гибкости. Вы можете протестировать и сравнить с трафиком, полученным трассировкой SQL-профилировщика SQL, на сервере, чтобы проверить, что он работает.

Другая альтернатива - попытаться изменить соответствующий раздел кода ADO.Net и вставить журнал. Такие инструменты, как AfterThought https://github.com/vc3/Afterthought, могут быть вариантом, хотя я думаю, что это вызывает проблемы во всех, кроме самых контролируемых средах, особенно с белым листингом, AV, обновлениями, контролем версий и т. Д.




Related