Ответ 1
Будет ли отслеживание данных ADO.NET работать для вас? Он подключается к ETW, из которого вы можете приклеить свою текущую систему ведения журнала. Однако, похоже, он не слишком изолирован.
У меня есть приложение, которое использует как Entity Framework, так и Dapper. Я хотел бы предоставить произвольный регистратор для выхода из любого sql, который выдается через соединение ado.net. Каков наилучший способ сделать это?
В качестве альтернативы, если это нелегко, каковы именно трудности?
Будет ли отслеживание данных ADO.NET работать для вас? Он подключается к ETW, из которого вы можете приклеить свою текущую систему ведения журнала. Однако, похоже, он не слишком изолирован.
Miniprofiler, написанный той же командой, работает как с dapper, так и с Entity Framework - хотя iirc для более позднего требует немного больше работы. Это обеспечивает возможность ведения журналов и профилирования команд ADO.NET. Мы используем его 24x7 здесь, в stackoverflow (и всей сети обмена стеками), поэтому он работает хорошо даже в масштабе.
Инструмент Glimpse предлагает возможность отслеживать вызовы SQL (вместе с тонной другой информацией) и активно пропагандируется Команда ASP.NET: http://www.asp.net/mvc/overview/performance/profile-and-debug-your-aspnet-mvc-app-with-glimpse
Воспользуйтесь API SharpPcap и прослушайте соединения, установленные между IP-адресом клиента и IP-сервером SQL на порте, который выполняется SQL, Затем вы можете запустить либо регулярное выражение, либо подобное, чтобы извлечь команды SQL. Большинство из них начнутся с INSERT
, UPDATE
, SELECT
, DELETE
или EXEC
. После того, как у вас есть строка, вызовите любой регистратор, который у вас есть, и запишите журнал по мере необходимости. Вы можете запустить это как услугу, второе приложение, запущенное вашим приложением, или даже с первого на второй поток. Это немного ниже, чем конвейер ADO
, но это дает вам больше гибкости. Вы можете протестировать и сравнить с трафиком, полученным трассировщиком SQL/SQL на сервере, для проверки того, что он работает.
Другой вариант - попытаться изменить соответствующий раздел кода ADO.Net и вставить журнал. Такие инструменты, как AfterThought https://github.com/vc3/Afterthought, могут быть вариантом, хотя я думаю, что это требует проблем во всех, кроме наиболее контролируемых средах, особенно с белым листингом, AV, обновления, контроль версий и т.д.
Вы можете использовать log4net: http://www.nuget.org/packages/log4net/
Я использую его в нескольких крупных проектах. Очень полезно, поскольку вы можете указать, что/где вы хотите зарегистрировать.
Поскольку вы хотите записывать операторы SQL, вы можете поместить в него доступ к вашему уровню доступа к данным.