jueves, 26 de marzo de 2015

Tips: println vs log.debug


El titulo de esta entrada puede ser algo raro sin embargo la mayoría de nosotros estamos acostumbrados a debuguear con el famosísimo “println” antes de usar “el debugger”, si ese es tu caso este pequeño tip te interesa.




Como podemos observar en la imagen anterior hay dos líneas cuyo contenido es exactamente el mismo “el valor recibido es..” pero podemos notar que la instrucción en un caso es el famosísimo “println” y en la otra tenemos un log.debug, si nosotros lanzamos nuestra aplicación y desde web entramos al index del controlador Ejemplo, únicamente veremos la salida de consola “el valor recibido es”, pero ¿por qué si yo puse dos líneas? Esto es porque la configuración del log está establecida por defaul a error.


Niveles de Log

Existen diferentes niveles de log, esto es porque seguramente no queremos llenar nuestra consola con un montón de mensajes de cualquier tipo, para ello y depende también de nuestra manera de colocarlos, existen diferentes niveles de log:

• OFF: este es el nivel de mínimo detalle, deshabilita todos los logs.
• FATAL: se utiliza para mensajes críticos del sistema, generalmente después de guardar el mensaje el programa abortará.
• ERROR: se utiliza en mensajes de error de la aplicación que se desea guardar, estos eventos afectan al programa pero lo dejan seguir funcionando, como por ejemplo que algún parámetro de configuración no es correcto y se carga el parámetro por defecto.
• WARN: se utiliza para mensajes de alerta sobre eventos que se desea mantener constancia, pero que no afectan al correcto funcionamiento del programa.
• INFO: se utiliza para mensajes similares al modo "verbose" en otras aplicaciones.
• DEBUG: se utiliza para escribir mensajes de depuración. Este nivel no debe estar activado cuando la aplicación se encuentre en producción.
• TRACE: se utiliza para mostrar mensajes con un mayor nivel de detalle que debug.
• ALL: este es el nivel de máximo detalle, habilita todos los logs (en general equivale a TRACE).

El uso de cada nivel dependerá de lo que queramos mostrar, por ejemplo si quiero enviar un mensaje dentro de un ciclo puedo utilizar log.debug “en el ciclo $i …” y si ocurre algo mal dentro de mi ciclo que estaba previamente dentro de un try-catch puedo poner un log.error “ocurrio un error dentro del ciclo …” de esta manera dependiendo del nivel de log establecido se mostraran o no los mensajes.


Cambiando el nivel de log

Para cambiar el nivel del log debemos ir al archivo “Config.groovy” y en el apartado log4j poner el nivel de log seguido de la clase o clases a las que queremos aplicarlo ejemplo:

info ‘grails.app.controllers’ //establece nivel de log debug para todos nuestros controladores
debug ‘grails.app.controllers.com.test.EjemploController’ //establece nivel de log info para el controlador Ejemplo.


Una vez que cambiamos el nivel de log para al ejecutar la aplicación y correr el programa veremos la siguiente salida:




Como podemos observar se pintan dos líneas: la original del println y la de debug que además de lo que hemos puesto trae información que puede ser importante para nosotros como por ejemplo la hora y el nombre del controlador desde donde proviene el mensaje.
Conclusiones: si son de los que usan println para debuguear sus aplicaciones, les aconsejo que utilicen los niveles de log, aunque es mejor utilizar el debugger.

No hay comentarios:

Publicar un comentario