language-agnostic logging verbosity

language agnostic - ¿Cómo determinar qué nivel de registro usar?



language-agnostic logging (6)

Los niveles de registro WARN, ERROR y FATAL son bastante claros. Pero cuando es algo DEBUG, y cuando INFO?

He visto algunos proyectos que son molestamente prolijo en el nivel INFO, pero también he visto código que favorece demasiado el nivel de DEPURACIÓN. En ambos casos, la información útil está oculta en el ruido.

¿Cuáles son los criterios para determinar los niveles de registro?


De manera informal uso este tipo de jerarquía,

  • DEBUG - valores reales de rastreo
  • INFORMACIÓN - Algo acaba de pasar, nada importante, solo una bandera
  • WARN: todo funciona, pero algo no es lo que se esperaba
  • ERROR: algo ha sucedido que deberá corregirse, pero podemos continuar y realizar otras actividades (independientes)
  • FATAL: un problema tan serio que ni siquiera deberíamos continuar

Por lo general, la versión con INFO se registra, pero solo si sé que los archivos de registro realmente se revisan (y el tamaño no es un problema), de lo contrario es WARN.


No creo que haya reglas duras y rápidas; Usando los niveles de tipo log4j, mis ''reglas generales'' son algo así como:

  • FATAL : la aplicación (o al menos un hilo) está a punto de morir horriblemente. Aquí es donde va la información que explica por qué está sucediendo eso.
  • ERROR : algo que la aplicación está haciendo que no debería. Este no es un error de usuario (''consulta de búsqueda no válida''); es una falla de aserción, problema de red, etc., probablemente una que va a abortar la operación actual
  • WARN : algo que es preocupante pero que no hace abortar la operación; # de conexiones en el conjunto de bases de datos que se está agotando, un tiempo de espera inusual pero esperado en una operación, etc. A menudo pienso en ''WARN'' como algo que es útil en conjunto; Ej. grep, group, y cuéntelos para obtener una imagen de lo que está afectando la salud del sistema
  • INFORMACIÓN : registro normal que es parte del funcionamiento normal de la aplicación; diagnóstico para que pueda volver atrás y decir ''¿con qué frecuencia se realizó esta operación de amplio nivel?'', o ''¿cómo llegaron los datos del usuario a este estado?''
  • DEPURACIÓN : Desactivado de forma predeterminada, puede activarse para la depuración de problemas inesperados específicos. Aquí es donde puede registrar información detallada sobre los parámetros del método clave u otra información que sea útil para encontrar problemas probables en áreas específicas del código "problemáticas".
  • TRACE : "¿En serio, está sucediendo WTF aquí?!? Necesito registrar cada declaración que ejecuto para encontrar este error de corrupción de memoria @ # $ @ing antes de volverme loco"

No está escrito en piedra, pero es una idea aproximada de cómo lo pienso.


No hay necesidad de un nivel DEBUG2. Para eso está ''TRACE''. TRACE está destinado a ser el nivel más bajo absoluto de registro que da salida a cada información posible que pueda querer ver.

Para evitar un aluvión de información, generalmente no se recomienda habilitar el registro de nivel de rastreo en todo un proyecto. En su lugar, use ''DEPURAR'' para encontrar información general sobre el error y dónde se produce (de ahí el nombre), y luego habilite RASTREAR solo para ese componente si todavía no puede resolverlo.


Piensa en quién necesita usar cada nivel. En mi código, mantengo DEBUG reservado para una salida de desarrollador, por ejemplo, salida que solo ayudaría a un desarrollador. VERBOSE se usa para un usuario normal cuando se necesita mucha información. INFO que uso para mostrar normalmente eventos importantes (por ejemplo, enviar una página web, verificar algo importante).

Y FAIL y WARN son bastante auto explicativos.


Tiendo a INFO hacia el usuario para darles mensajes que ni siquiera son advertencias. DEPURAR tiende a ser para el uso del desarrollador, donde me sale mensajes para ayudar a rastrear el flujo a través del código (con los valores de las variables también).

También me gusta otro nivel de DEPURACIÓN (DEBUG2?) Que proporciona cargas absolutas de información de depuración, como volcados hexadecimales de todos los almacenamientos intermedios, etc.


La convención en mi equipo es usar debug si algo se calcula en el mensaje, mientras que la info se usa para texto sin formato. Entonces, en realidad, la info le mostrará lo que está sucediendo y la debug mostrará los valores de las cosas que están sucediendo.