2009-03-06 11 views
5

Antecedentes: Heredé una aplicación web destinada a crear conexiones sobre la marcha entre equipos locales y remotos. Recientemente se ha producido un gran número de partes en movimiento: la aplicación en sí misma ha cambiado significativamente; la cadena de herramientas de desarrollo acaba de actualizarse; y tanto el equipo local como el remoto han sido "modificados" para soportar esos cambios.Logging vs. Debugging

Lo bueno es que tiene un sistema de registro razonable que escribirá mensajes de depuración en un archivo, y se registrará tanto en el archivo como en la pantalla del usuario en tiempo real. Tengo la oportunidad de volver a trabajar todo el mecanismo de registro/depuración.

Ejemplos:

  • Todos los mensajes son con fecha y hora y el prefijo con un nivel de gravedad.
  • Los registros son para el cliente. Registran las respuestas del sistema a sus solicitudes.
  • Cualquier registro que identifique un problema también sugiere una solución.
  • Los depuradores son para desarrolladores y soporte técnico. Revelan las partes internas del sistema.
  • Los depuradores indican la función y/o línea que los generó.
  • El cliente puede ajustar el nivel de depuración sobre la marcha para establecer la verbosidad.

Pregunta: ¿Cuál mejores prácticas que han utilizado como desarrollador, o visto como un consumidor, que generan registros y depura útiles?


Editar: muchas sugerencias útiles hasta ahora, gracias! Para aclarar: estoy más interesado en qué registrar: contenido, formato, etc. .-- y las razones para hacerlo, que las herramientas específicas.

¿De qué se trataba los mejores registros que ha visto que los han vuelto más útiles?

Gracias por su ayuda!

Respuesta

6

Lo más valioso que se hace con cualquier marco de trabajo es una herramienta de "1 clic" que reúne todos los registros y los envía por correo incluso cuando la aplicación se implementa en un equipo perteneciente a un cliente.

Y tome buenas decisiones sobre qué registrar para poder seguir aproximadamente las rutas principales en su aplicación.

Como marcos He utilizado las normas (log4net, log4java, log4C++)

no implementan su propio marco de registro, cuando ya hay una buena fuera de la caja. La mayoría de las personas que lo hacen solo reinventan la rueda.

+1

Sí, un botón "SendItToTechSupport" nos ahorrará montones de tiempo ... una vez He hecho que los registros sean más informativos que "¡Aquí estoy!" Mi trabajo está cortado para mí. –

6

No confundas el registro, el seguimiento y los informes de errores, algunas personas que conozco lo hacen y crea un infierno de un archivo de registro para obtener la información que quiero.

Si yo quiero tener todo lo produjo, yo separadas en las siguientes:

  • Tracing -> Vuelca cada acción y paso, sellos de tiempo, con los datos de entrada y de salida de esa etapa (más fea y archivo más grande)
  • registro -> Registrar el proceso de negocio pasos solamente, así que consulta cliente no ingrese los criterios de información y los datos de salida nada más.
  • informe de errores/Depuración -> Excepciones registran detallando donde ocurrió, sellos de tiempo, entrada/salida de datos, si es posible, la información del usuario, etc

De esta forma si se han producido errores y el error/El registro de depuración no contiene suficiente información para mi gusto. Siempre puedo hacer un grep -A 50 -B 50 'timestamp' tracing_file para obtener más detalles.

EDIT: Como también se ha dicho, se pegue a los paquetes estándar, como el construido en el módulo de registro de Python como un ejemplo siempre es buena. Hacer rodar uno mismo no es una gran idea a menos que el idioma no tenga uno en su biblioteca estándar. Me gusta envolver el registro en una pequeña función que generalmente toma el mensaje y el valor para determinar a qué registros va, es decir. 1 - rastreo, 2 - registro, 4 - depuración para enviar un valor de 7 gotas a los 3, etc.

+0

Gracias por la sugerencia de "recopilar una fecha y hora", eso será útil. Pero estoy particularmente interesado en _what_ para iniciar sesión, por lo que los registros mismos serán útiles. –

0

Utilice un formato de registro existente, como el utilizado por Apache, y podrá aprovechar las numerosas herramientas disponibles para analizar el formato.

3

Me gustaría configurar su sistema de registro para tener múltiples niveles de registro, en los servicios que escribo Tengo un registro/auditoría para casi cada acción y se le asigna un nivel de auditoría 1-5 cuanto mayor sea el número más eventos de auditoría obtener.

  1. El registro muy básico: iniciar, detener y reiniciar
  2. básico de registro: número de procesamiento x de archivos, etc.
  3. El registro estándar: A partir de su elaboración, acabado, etc
  4. registro avanzado: Principio y final de todas las etapas de procesamiento
  5. todo: cada acción tomada

se establece el nivel de auditoría en un archivo de configuración para que pueda ser chang ed sobre la marcha.

3

Algunas reglas de dedo generales que se han encontrado para ser útil en aplicaciones de servidor:

  • RequestID - asignar un ID de solicitud para cada solicitud entrante (HTTP) e inicie sesión que en cada línea de registro, por lo que puede grep fácilmente esos registros más tarde por ese ID y encontrar todas las líneas relevantes. Si cree que es muy tedioso agregar ese ID a cada declaración de registro, al menos los marcos de registro de Java lo han hecho transparente con el uso de Mapped Diagnostic Context (MDC).
  • ID de objeto - si su aplicación/servicio se ocupa de manipular algunos objetos comerciales que tienen clave principal, entonces es útil adjuntar también esa clave primaria al contexto de diagnóstico. Más tarde, si alguien viene con la pregunta "¿cuándo se manipuló este objeto?" puede grep fácilmente por el ID de objeto y ver todos los registros relacionados con ese objeto. En este contexto, es (a veces) útil usar realmente Nested Diagnostic Context en lugar de MDC.
  • cuándo iniciar sesión? - al menos debe iniciar sesión cada vez que cruce un límite importante de servicio/componente. De esta forma, puede reconstruir el flujo de llamadas y profundizar en la base de código particular que parece causar el error.

Como soy un desarrollador de Java, también daré mi experiencia con las API y marcos de Java.

API

lo recomiendo a utilizar Simple Logging Facade for Java (SLF4J) - en mi experiencia, es la mejor fachada a la tala:

  • -funciones completas: no ha seguido el menos común denominador enfoque (como el registro de bienes comunes); en su lugar, está utilizando degradar con gracia el enfoque.
  • tiene adaptadores para prácticamente todos los marcos de registro de Java populares (por ejemplo log4j)
  • tiene soluciones disponibles en la forma de redirigir todas las API de registro de legado (log4j, commons-logging) para SLF4J

Implementación El La mejor implementación para usar con SLF4J es logback, escrita por el mismo tipo que también creó SLF4J API.

+0

Sugerencias muy útiles, gracias. No tengo el lujo de los idiomas del siglo XXI para este proyecto, pero sus técnicas aún se aplican perfectamente. –

5

Algunas personas nunca usan un depurador pero registran todo. Eso es filosofías diferentes, tienes que hacer tu propia elección. Puede encontrar muchos consejos like these o this one. Tenga en cuenta que estos consejos no están relacionados con el lenguaje ...

Coding Horror guy tiene an interesting post sobre problema de la tala y la razón por la tala abusiva podría ser una pérdida de tiempo en ciertas condiciones.

Simplemente creo que el registro es para rastrear cosas que podrían permanecer en producción. Debug es para el desarrollo Tal vez es una forma demasiado simple de ver las cosas, porque algunas personas usan registros para la depuración porque no soportan los depuradores. Pero el modo de depuración también puede ser una pérdida de tiempo: no tiene que usarlo como una especie de caso de prueba, porque no está escrito y desaparecerá después de la sesión de depuración.

Así que creo que mi opinión sobre esto es:

  • el registro de las huellas necesarias y útiles a través de entornos de desarrollo y de producción, con niveles de desarrollo y producción, con el uso de un marco de registro (log4 herramientas familiares)
  • modo de depuración para casos extraños especiales cuando las cosas están fuera de control
  • casos de prueba son importantes y pueden ahorrar tiempo gastado en sesiones de depuración laberínticas infernales, utilizado como un método anti-regresión. Tenga en cuenta que la mayoría de las personas no usan casos de prueba.

codificación horror dijo resistir a la tendencia de registrar todo. Así es, pero ya he visto una aplicación hudge que hace exactamente lo contrario de una manera bonita (y a través de una base de datos) ...