tutorial net guide ejemplos asp c# entity-framework logging ado.net dapper

c# - guide - Cómo capturar todos los SQL enviados a través de Ado.Net



dapper mysql c# (5)

Miniprofiler, que está escrito por el mismo equipo, funciona tanto con dapper como con Entity Framework, aunque iirc requiere un poco más de trabajo. Esto proporciona la capacidad para registrar y perfilar los comandos de ADO.NET. Lo usamos 24x7 aquí en stackoverflow (y en toda la red de intercambio de stack), por lo que funciona bien incluso a escala.

Tengo una aplicación que usa Entity Framework y Dapper. Me gustaría proporcionar un registrador personalizado para cerrar cualquier sql que se emite a través de la conexión ado.net. Cual es la mejor manera de hacer esto?

Alternativamente, si no es fácilmente posible, ¿cuáles son exactamente las dificultades?


Puede usar log4net: http://www.nuget.org/packages/log4net/

Lo he estado usando en un par de grandes proyectos. Muy útil ya que puede especificar qué / dónde desea iniciar sesión.
Como desea registrar sentencias de SQL, puede colocar un registro en su capa de acceso a datos.



Aproveche la API de SharpPcap y escuche las conexiones que se establecen entre la IP del cliente y la IP del servidor SQL en el puerto que ejecuta SQL. A continuación, puede ejecutar expresiones regulares o similares para extraer los comandos SQL. La mayoría de ellos comenzará con INSERT , UPDATE , SELECT , DELETE o EXEC . Una vez que tenga la cadena, llame a cualquier registrador que tenga en su lugar y regístrese según sea necesario. Puede ejecutar esto como un servicio, una segunda aplicación lanzada por su aplicación, o incluso desde el primero en un segundo hilo. Está un poco más abajo que la tubería ADO , pero eso solo te da más flexibilidad. Puede probar y comparar el tráfico recibido por SQL profiler / SQL trace en el servidor para validar que funciona.

La otra alternativa es intentar modificar la sección relevante del código ADO.Net e insertar el registro. Herramientas como AfterThought https://github.com/vc3/Afterthought podrían ser una opción, aunque creo que esto es un problema en todos los entornos, excepto en los más controlados, especialmente con listas blancas, AV, actualizaciones, control de versiones, etc.