2011-02-16 15 views
6

Necesito iniciar sesión en nuestra aplicación y me gustaría mantener el tiempo consumido debido al registro lo menos posible. Estoy pensando en utilizar MSMQ para que la aplicación inicie sesión en MSMQ y luego pueda registrar los mensajes de MSMQ en la base de datos/archivos de forma asincrónica.Uso de msmq para el registro asincrónico

¿Esta idea es buena en términos de rendimiento? o iniciar sesión en archivos planos sincrónicamente usando log4net es mejor.

Además, estoy pensando en codificar una capa de abstracción de registro para que pueda conectar cualquier herramienta de registro más tarde sin afectar a otros códigos.

Por favor, asesorar.

Gracias, sveerap

Respuesta

6

Yo aconsejaría en contra de este. Esta es una solución innecesariamente compleja para un problema que realmente no existe. He usado log4net en múltiples proyectos y nunca he visto una degradación significativa del rendimiento por eso.

Es una mejor idea cuidar cuidadosamente la selección de los niveles correctos de registro para cada mensaje de registro (DEPURAR, INFO, ADVERTENCIA, etc.). Cuando comienzas tu proyecto y quizás durante un corto período de tiempo cuando estás en producción, registras todo, desde DEPURAR a niveles más altos. Cuando esté seguro de que todo funciona, cambie a INFO en la configuración. Esto debería ser suficiente para abordar cualquier problema de rendimiento que pueda enfrentar al iniciar sesión.

En cuanto a la capa de abstracción, tampoco haría esto. Log4net mismo abstrae todos los detalles del registro a través de sus apéndices de registrador. Y si realmente quiere esto, también puede echarle un vistazo al Common.Logging.

+0

Gracias por la respuesta. Puede que tenga que registrar los mensajes en una base de datos en lugar de archivos planos, luego log4net no tomará más tiempo, ya que debe hacerse de forma síncrona en lugar de MSMQ, lo que se puede hacer de forma asincrónica. – sveerap

+0

No creo que haya una diferencia de rendimiento significativa entre crear un mensaje de MSMQ y agregar un registro de base de datos. Si ya tiene la infraestructura MSMQ en su lugar, puede escribir un log4net 'MSMQAppender' que le permita iniciar sesión en MSMQ, pero todavía no creo que valga la pena. –

1

Honestamente, MSMQ parece excesivo para registrar mensajes. A menos que realmente necesite una entrega confiable de los mensajes de registro, log4net parece ser una solución perfecta. Tenga en cuenta también que crear un mensaje en MSMQ puede llevar más tiempo que escribir en un archivo almacenado.

Es posible que también quiera echar un vistazo al objeto System.Diagnostics.Trace.

+0

Gracias por la respuesta. Puede que tenga que registrar los mensajes en una base de datos en lugar de archivos planos, luego log4net no tomará más tiempo, ya que debe hacerse de forma síncrona en lugar de MSMQ, lo que se puede hacer de forma asincrónica. – sveerap

4

Por lo que vale, hay escenarios en los que esto no es excesivo. Pero, para la mayoría de las aplicaciones, diría que sí.

Trabajo en un entorno que está compuesto por varios mainframes z/OS y una variedad de midranges * nix. Todos los sistemas escriben mensajes de registro en una cola compartida que se procesa. Organizativamente, se encontró que proporciona un mejor rendimiento y para garantizar la coherencia del registro.

Dicho esto, puedo ver la ventaja de utilizar este enfoque para sus aplicaciones. Por ejemplo, desarrollar una gran cantidad de aplicaciones internas y tener un registro común (por ejemplo, en la base de datos, tener un proceso que viene y leer la cola y escribirlo en la base de datos) le permitiría agregar todos sus mensajes.

Sin embargo, usted va a probablemente encuentre que log4net u otro paquete de registro .NET se ajustará perfectamente a sus necesidades.

Existen ventajas para ambos, pero como todos han dicho, usar MSMQ para el registro es (probablemente) como ir tras una mosca con un bazooka.

Cuestiones relacionadas