¿Cuál es la mejor manera de recoger/informe de errores inesperados .NETO de la Ventana de Aplicaciones?

StackOverflow https://stackoverflow.com/questions/110488

Pregunta

Estoy buscando una solución mejor que lo que tenemos actualmente para tratar con inesperado errores de producción, sin reinventar la rueda.

Un número mayor de nuestros productos son WinForm y las aplicaciones de WPF que se instalan en los sitios remotos.Inevitablemente se producen errores inesperados, de NullReferenceExceptions a General de errores de red'.Así que van desde el programador de errores a los problemas del medio ambiente.

En la actualidad todas estas excepciones no controladas se registran mediante log4net y luego enviado de vuelta a nosotros para análisis.Sin embargo, hemos encontrado que a veces estos errores los 'informes' contienen muy poca información para identificar el problema.

En estos informes necesitamos información, tales como:

  1. Nombre de la aplicación
  2. La Versión De La Aplicación
  3. Estación de trabajo
  4. Tal vez una captura de pantalla
  5. Detalles de la excepción
  6. Sistema operativo
  7. La memoria RAM disponible
  8. La ejecución de los procesos
  9. Y así sucesivamente...

Yo realmente no quiero volver a inventar la rueda por el desarrollo de esta a partir de cero.Los componentes que son necesarios:

  1. Recopilación de errores (detalles como se mencionó anteriormente)
  2. Error 'remitente' (Cola necesario si DB o de Internet no está disponible)
  3. Error de la base de datos
  4. El análisis y la presentación de estos errores.E. g.10 errores más frecuentes o tiempos de espera entre las 4:00PM y 5:00PM.¿Cómo los errores de la comparación entre la versión de x y y?

Nota:Nos fijamos en SmartAssembly como una posible solución, pero a pesar de la cercanía no muy cumplen nuestras necesidades y tenía la esperanza de escuchar lo que otros desarrolladores ¿y si algunas de las alternativas que existen.

Editar: Gracias por las respuestas hasta ahora.Tal vez no fui claro en mi pregunta original, el problema no es cómo atrapar a todos los unhanded excepciones, sino más bien cómo lidiar con ellos y crear un motor de generación de informes (análisis) alrededor de ellas.

¿Fue útil?

Solución

Te sugiero que Jeff Atwood del artículo en Amigable Para El Usuario El Manejo De Excepciones, que hace más de lo que pides ya (Información de la Aplicación, Captura de pantalla, Detalles de la Excepción, el sistema operativo, el Registro de archivos de texto y Correo electrónico), y contiene el código fuente para que usted agregue las cosas adicionales que usted necesita.

Otros consejos

Usted puede adjuntar una excepción no controlada en el evento y registro/bateó un webservice/etc.

[STAThread]
static void Main() 
{
    Application.ThreadException += new ThreadExceptionEventHandler(OnUnhandledException);
    Application.Run(new FormStartUp());
}
static void OnUnhandledException(object sender, ThreadExceptionEventArgs t) 
{
    // Log
}

También encontré este fragmento de código mediante el dominio de aplicación en lugar de ThreadException:

static class EntryPoint {
    [MTAThread]
    static void Main() {
        // Add Global Exception Handler
        AppDomain.CurrentDomain.UnhandledException += 
            new UnhandledExceptionEventHandler(OnUnhandledException);

        Application.Run(new Form1());
    }

    // In CF case only, ALL unhandled exceptions come here
    private static void OnUnhandledException(Object sender, 
        UnhandledExceptionEventArgs e) {
        Exception ex = e.ExceptionObject as Exception;
        if (ex != null) {
            // Can't imagine e.IsTerminating ever being false
            // or e.ExceptionObject not being an Exception
            SomeClass.SomeStaticHandlingMethod(ex, e.IsTerminating);
        }
    }
}

Aquí está una parte de la documentación sobre la misma: Dominio De Aplicación De Excepción No Controlada

Fuera de sólo el manejo del mismo, realmente no hay una forma genérica para hacer esto que es reutilizable, lo que realmente necesita ser integrado con la interfaz de la aplicación correctamente, pero usted puede configurar un webservice que lleva el nombre de la aplicación, la excepción, y todas esas cosas buenas y tienen un punto centralizado para todas sus aplicaciones.

Puede que desee para el estudio de la función de informe de errores integrado en JetBrain del Omea Reader.Tiene un catch-all error-el componente de control que aparece un cuadro de diálogo cuando se produce un error inesperado.El usuario puede introducir más detalles antes de presentar el problema a JetBrain del público a error-recopilación de servicio web.

Hicieron Omea de código abierto para permitir a la comunidad para actualizar el .NET 1.1 de la base de código para v2 o 3.http://www.jetbrains.net/confluence/display/OMEA/this+link

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top