¿Cuál es la mejor manera de administrar el registro de errores para las excepciones?

13

Introduction

Si se produce un error en un sitio web o sistema, por supuesto, es útil registrarlo y mostrar al usuario un mensaje cortés con un código de referencia para el error.

Y si tiene muchos sistemas, no querrá que esta información se divierta, es bueno tener un solo lugar centralizado para ella.

En el nivel más simple, todo lo que se necesita es un ID incremental y un volcado serializado de los detalles del error. (Y posiblemente el "lugar centralizado" sea una bandeja de entrada de correo electrónico).

En el otro extremo del espectro hay una base de datos completamente normalizada que también le permite presionar un botón y ver una gráfica de errores por día, o identificar cuál es el tipo de error más común en el sistema X, si el servidor A tiene más errores de conexión a la base de datos que el servidor B, y así sucesivamente.

A lo que me refiero aquí es al registro de errores / excepciones a nivel de código por parte de un sistema remoto: no seguimiento de problemas "basado en humanos", como el hecho con Jira, Trac, etc. / p>


Questions

Estoy buscando ideas de desarrolladores que hayan usado este tipo de sistema, específicamente con respecto a:

  • ¿Cuáles son las funciones esenciales sin las que no podrías hacerlo?
  • ¿Qué son buenas para tener funciones que realmente le ahorren tiempo?
  • ¿Qué características pueden parecer una buena idea, pero en realidad no son tan útiles?

Por ejemplo, diría que una función "mostrar duplicados" que identifica la ocurrencia múltiple de un error (sin preocuparse por los detalles 'sin importancia' que pueden diferir) es bastante esencial.
Un botón para "crear un problema en [Jira / etc] para este error" parece un buen ahorro de tiempo.

Para reiterar, lo que busco son las experiencias prácticas de las personas que han usado dichos sistemas, preferiblemente respaldadas por por qué una característica es asombrosa / terrible.
(Si vas a teorizar de todos modos, al menos marca tu respuesta como tal).

    
pregunta Peter Boughton 19.11.2010 - 19:49

6 respuestas

5

He estado en un proyecto en el que, con errores de cliente registrados, he utilizado Microsoft Enterprise library . Toda excepción donde enviar a nuestro buzón. En el asunto del correo, agregamos un código hash de error serializado para evitar mensajes duplicados. Por supuesto, uno podría almacenar mensajes serializados en la base de datos, etc.

Le recomiendo que revise biblioteca de Microsoft Enterprise y Log4Net .

Algunas características de Log4Net

  • Soporte para múltiples marcos
  • Salida a múltiples objetivos de registro
  • arquitectura de registro jerárquico
  • Configuración XML
  • Configuración dinámica
  • contexto de registro
  • arquitectura probada
  • Diseño modular y extensible • Alto rendimiento con flexibilidad
respondido por el Amir Rezaei 19.11.2010 - 20:53
1

En el caso de las aplicaciones de base de datos, algún tipo de ID (como <TABLE>:<PrimaryKeyID> ) que le permite rastrear los registros en la base de datos relacionados con el alcance donde se detectó la excepción.

Lo he hecho con Oracle y PL / SQL, registrando el ID en una tabla de base de datos dentro de la aplicación, desde el controlador de excepciones.

    
respondido por el Miguel Veloso 19.11.2010 - 20:39
1

Gran parte de lo que describe (es decir, las partes específicas del registro) se implementa en la biblioteca empresarial como lo ha señalado Amir Rezaei. Todo lo demás parece ser más parte de la parte analítica (es decir, qué hacer con los registros después).

En mi caso, creé algunas aplicaciones pequeñas y scripts de SQL que hicieron algunas cosas más fáciles. Estas son algunas de las cosas que realmente me gustaron:

  • Agrupar los mismos errores juntos (es decir, 100 usuarios experimentaron el mismo error casi al mismo tiempo es 1 informe de error con una nota de cuántas ocurrencias hubo)
  • Presentar automáticamente un ticket en el rastreador de casos (nunca logré hacer esto con solo hacer clic en un botón, pero siempre quise hacerlo)
  • Nombre de usuario del usuario del software (no solo la máquina, que está disponible con la mayoría de los registradores). En algunos casos, las cuentas de usuario automatizadas causaron problemas mientras que en otros, los usuarios específicos fueron la causa de los problemas. "Necesito ver a Mike hacer un poco de trabajo, él sigue causando un error específico".
  • "Acciones del usuario": tenía una pila global que mantendría un seguimiento de cada clic / botón que se podía hacer cuando el usuario lo hacía y tenía que añadirlo a los registros de errores. La reproducción del error fue a menudo un caso de caminar a través de ese rastreo y realizar los mismos pasos que el usuario (esperaba crear un generador de pruebas CodedUI que analice el rastreo y realice los pasos automáticamente, pero nunca lo hizo)
respondido por el Steven Evers 02.01.2011 - 22:00
0

A veces, la información de registro es demasiado voluminosa para ser almacenada en el disco. Un enfoque que he visto es escribir sus entradas de registro en una manguera cortafuegos (en, por ejemplo, Perl) algo como esto:

# Create socket.
my $sock = IO::Socket::INET->new(
    Proto       => 'udp',
    PeerAddr    => $bcastaddr,
    Broadcast   => 1,
) or die "Can't create socket ($bcastaddr): $!";

while (<>) {
    chomp;
    unless (/File\ does\ not\ exist:/) {
        $sock->send("$eventtype:$_") or warn "Can't send: $!";
    }
}

entonces un analista puede ver lo que quiere ver.

    
respondido por el leed25d 19.11.2010 - 20:49
0

Aquí hay algunas cosas que he aprendido del monitoreo de errores en nuestras aplicaciones:

  • Poder rastrear un archivo de registro rodante (generalmente uso log4net / log4j para iniciar sesión en aplicaciones y BareTail seguir el registro) es realmente útil para poder verificar el estado actual de un sistema
  • Para ver cuándo se introdujeron los problemas y la velocidad a la que ocurren los problemas, es bueno tenerlos en una base de datos con marcas de tiempo para que pueda ejecutar informes.
  • La capacidad de enviar alertas por correo electrónico / SMS / voz es muy útil para garantizar que los sistemas funcionen correctamente, pero tiene que tener la capacidad de personalizar fácilmente los tipos de errores que lo alertan. Si recibe 800 mensajes de correo electrónico de error al día, no podrá ver el "Oh, no, el centro de datos está en llamas".

He tenido excelentes resultados para log4net porque hace que sea realmente fácil de iniciar sesión en múltiples lugares y hacer que los cambios en la configuración de registro también sean fáciles.

    
respondido por el aubreyrhodes 19.11.2010 - 23:14
0

elmah es un sistema de registro de errores de código abierto para aplicaciones ASP.NET y se puede agregar a un sistema existente (usando NuGet enlace ) Rápida y fácilmente. Soporta varios backends y funciones de notificación.

No conozco a nadie que lo haya agregado a una aplicación de escritorio, ya que se ejecuta como un sitio web, pero no hay nada que le impida ejecutarlo como un servicio y publicar sus excepciones a través de la web.

enlace

  

ELMAH (Módulos y controladores de registro de errores) es un recurso de registro de errores en toda la aplicación que es completamente conectable. Se puede agregar dinámicamente a una aplicación web ASP.NET en ejecución, o incluso a todas las aplicaciones web ASP.NET en una máquina, sin ninguna necesidad para la re-compilación o re-implementación.

     

Una vez que se haya colocado ELMAH en una aplicación web en ejecución y se haya configurado adecuadamente, obtendrá las siguientes facilidades sin cambiar una sola línea de su código:

     
  • Registro de casi todas las excepciones no controladas.
  •   
  • Una página web para ver de forma remota el registro completo de las excepciones grabadas.
  •   
  • Una página web para ver de forma remota los detalles completos de cualquier excepción registrada, incluidos los rastros de pila de colores.
  •   
  • En muchos casos, puede revisar la pantalla amarilla de la muerte que ASP.NET generó para una excepción dada, incluso con el modo customErrors desactivado.
  •   
  • Una notificación por correo electrónico de cada error en el momento en que se produce.
  •   
  • Una fuente RSS de los últimos 15 errores del registro ...
  •   
    
respondido por el Bil Simser 24.03.2011 - 14:04

Lea otras preguntas en las etiquetas