2010-01-04 18 views
5

Tengo un montón de aplicaciones de cliente/servidor existentes que actualmente están avanzando. De vez en cuando, un cliente querrá agregar algún tipo de interfaz web para acceder a una parte de sus datos. Estos son típicamente personalizados, aunque algunos son "genéricos"; pero cada uno tiene su propia "instancia" en su propia máquina virtual.Base de datos de registro de errores: para muchas aplicaciones

Lo que quiero es un área centralizada para capturar y registrar cualquier error que aparezca en cualquiera de estas máquinas virtuales.

Estoy consitering la creación de una nueva base de datos y la configuración de un servicio WCF para habilitar cada una de estas aplicaciones web para crear una entrada de registro en mi base de datos centralizada, así como a la EventLog local.

¿Es ese un mal diseño?

actualización

Las aplicaciones web son de 2003/IIS6 y 2008/IIS7, construido en ASP.NET. Muchas de las instancias se encuentran en un par de servidores web, pero muchas se implementarán en máquinas virtuales individuales.

+0

¿Puede proporcionarnos más detalles sobre la plataforma que está utilizando? Suena como Windows + IIS ...? – Wim

Respuesta

4

Así es exactamente como lo implementamos.

Tenemos 3 tablas en la base de datos:

Event Types 
------------ 
EventType int 
EventDescription varchar(50) 


MonitoredSystems 
--------------- 
SystemID int 
SystemName varchar(50) 
SystemDescription text 


Events 
------- 
RecordID bigint 
EventTime datetime 
SystemID int FK 
EventText text 
EventType int FK 
Acknowledged bit 

También nos prepararon rápidamente un sitio donde podíamos ver los eventos. El campo "Reconocido" nos permite configurar una vista con los nombres "Problemas críticos no reconocidos" para que podamos ver rápidamente cualquier problema nuevo y reconocerlos a medida que los leemos.

Sabemos que hay otras herramientas que pueden hacer esto por nosotros, pero ninguna fue tan fácil de integrar como nuestra propia versión, y ahora la usamos en cada aplicación que construimos. Tenemos algunas otras personalizaciones que no menciono aquí que otras herramientas no proporcionaron de la caja.

Así que creo que su idea está bien. Si lo construye usted mismo, puede personalizarlo para que funcione de la manera que desee. Sin embargo, recomendaría al menos buscar herramientas como Log4net, etc.

+0

Sé que este es un hilo muy antiguo, pero me gustaría saber más sobre su implementación y cómo se ha mejorado durante estos últimos años también.Por ejemplo, ¿simplemente inserta un fragmento en sus aplicaciones, hereda de la clase, o tiene que escribir una llamada en numerosos bloques try-catch de algo así? Gracias. :) – Chiramisu

+0

La versión corta es que tenemos WriteToError registra llamadas en código en cada aplicación. El código es conciso: es una llamada a un servicio web. Siempre ponemos un controlador de error global en global.asax (webapps) y para WinForms, manejamos los eventos System.Windows.Forms.Application.ThreadException y AppDomain.CurrentDomain.UnhandledException. Por lo general, configuramos el funciton de registro de errores en una clase estática por aplicación para que otras clases simplemente llamen a "OverseerLogger.LogError (ErrorMessage, System.Environment.MachineName, SeverityLevel) para simplemente registrar los mensajes. – David

3

debería echar un vistazo a ELMAH (módulos de registro de errores y manipuladores) (http://code.google.com/p/elmah/) con la combinación de Orbit One del reportero de excepción (http://aspexceptionreporter.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=35343) que cuando se combina le puede dar una amplia cobertura de la empresa para la notificación de errores en una ubicación centralizada.

+0

+1 en el Reportero de excepciones de Orbit One. No lo había visto antes y parece muy resbaladizo. –

+0

+1. Ese Exception Reporter de Orbit One se parece mucho a lo que se nos ocurrió como una aplicación local. Me gusta. – David

0

Si registra con frecuencia (depuración/información/advertencia), asegúrese de que las involuciones de RPC se realizan de forma asíncrona.

Recomendaría una estructura de datos más flexible;

Events 
------- 
RecordID bigint 
EventTime datetime 
EventLevel text 
SystemID text 
EventText text 
EventType text 
Acknowledged bit 

EventProperties 
------- 
RecordID bigint 
key text 
value text 

Los EventProperties permite la aplicación de registro para registrar cualquier información que pueda ser útil, sin tener que definir dichas propiedades antes de tiempo. Tenga en cuenta que no hay restricciones en SystemID, lo que permite agregar sistemas sin configuración.

Cuestiones relacionadas