Anuncios

Bienvenidos sean a este post, hoy veremos como depurar el registro.

Anuncios
Anuncios

En el post anterior vimos como activar el monitoreo de nuestra aplicacion mediante el registro (logging) en un archivo, esto nos puede ayudar a depurar nuestra aplicacion para distintos temas, ya sea desde un error (el mas usual) hasta ver otros tipos de estadisticas, pero en el post de hoy nos centraremos en como ver estos mensajes, sabemos que en todo momento hemos almacenado la informacion en la variables de entorno del sistema llamada DEBUG, veamos una forma mas especifica de utilizarlo para nuestra aplicacion:

DEBUG=express:* npm start
Anuncios

En este caso identificaremos claramente cuando este corriendo express y poder buscarlo en el registro pero nosotros haremos algo un poco mas personalizado para nuestra aplicacion y para ello debemos ir al codigo de nuestro post anterior, en caso de no poseerlo les dejo un link para descargarlo:

Anuncios

Una vez descargado el archivo simplemente debenn extraer el directorio en el PC y ya listo para funcionar, para habilitar la depuracion debemos agregar el siguiente segmento de codigo en cada uno de los modulos a depurar:

import { default as DBG } from 'debug';
const debug = DBG('notas:debug'); 
const dbgerror = DBG('notas:error');
Anuncios
Anuncios

Esto basicamente primero importara al modulo debug para la depuracion, lo siguiente sera crear dos objetos que usaremos como depuradores, en ambos casos llamamos a las funciones que se encargaran de la depuracion, el primer caso sera para llevar solamente un control de todos los mensajes que devuelva la aplicacion, el segundo caso sera para llevar un control de los errores que puedan surgir en nuestra aplicacion, en ambos casos tenemos un identificador para cada uno pero de eso hablaremos en un rato, veamos una forma de utilizarlo:

debug("algun contenido");
Anuncios

Como dijimos si se activa la depuracion en un modulo este comenzara a algunas de las dos funciones e imprimira los mensajes, en caso contrario no hara nada siendo esto una buena opcion para depurar dinamicamente nuestra aplicacion sin modificar el codigo sino simplemente a traves de la variable DEBUG.

Anuncios
Anuncios

Si miran al comienzo la variable DEBUG tiene un especificador de descripcion indicando cual codigo tendra la depuracion activada, el metodo mas simple es mediante el asterisco (*), el cual es un comodin que inicia cualquier depurador, y por el otro lado nuestros indicadores de depuracion que establecimos son del tipo identificador:identificador donde por convencion el primero sera para la aplicacion o libreria, y el segundo otro mas especifico pero esto es una convencion y se puede usar como ustedes crean mas conveniente, pasemos a aplicar a Notas y para ello debemos ir primero a nuestro archivo app.mjs y al comienzo agregaremos el segmento que comentamos anteriormente, luego al final del mismo archivo agregaremos el siguiente bloque de codigo:

server.on('request', (req, res) => {
  debug(`${new Date().toISOString()} request ${req.method} ${req.url}`);
});
Anuncios
Anuncios

Esta es una version adaptada de cuando hablamos del HTTPSniffer en este post, donde nos informara la fecha y hora de la solicitud y respuesta obtenida, nuestro siguiente paso sera ir al archivo appsupport.mjs y lo primero que haremos sera agregar al comienzo del archivo el segmento de codigo descripto anteriormente para implementar la depuracion, luego tomaremos la funcion onError y la modificaremos de la siguiente manera:

export function onError(error) {
        dbgerror(error);
        if (error.syscall != 'listen') {
                throw error;
        }
        const unir = typeof port === 'string'
                        ? 'Pipe ' + port
                        : 'Port ' + port;
        switch(error.code) {
                case 'EACCES':
                        console.error(`${unir} necesita mas privilegios`);
                        process.exit(1);
                        break;
                case 'EADORINUSE':
                        console.error(`${unir} esta en uso`);
                        process.exit(1);
                        break;
                default:
                        throw error;
        }
}
Anuncios

En este caso le agregamos una sola linea al linicio para que utilice ante algun error el objeto dbgerror y le pasaremos el error devuelto en ese momento, el resto de la funcion sigue sin alteraciones, y la siguiente modificacion la haremos en la funcion onListening donde la modificaremos de la siguiente manera:

export function onListening() {
        const direccion = server.address();
        const unir = typeof direccion === 'string'
                        ? 'pipe ' + direccion
                        : 'port ' + direccion.port;
        debug(`Escuchando en ${unir}`);
}
Anuncios

En este caso cambiamos la ultima linea de console.log a debug para que utilice al depurador, el resto de la funcion sigue de igual forma, para ver como funciona debemos utilizar el siguiente comando para iniciarlo:

$ REQUEST_LOG_FORMAT=common DEBUG=notas:* node ./app.mjs
Anuncios

En este caso primero estableceremoss el formato del log, luego pasamos el DEBUG y como lo ejecutaremos, a diferencia del post anterior esta vez lo mostraremos en pantalla dado que no hemos especificado ningun archivo, veamos como es su salida ahora mediante el siguiente video

Anuncios

Como podemos ver ahora tenemos una pantalla de depuracion mas proxima a lo que nosotros necesitamos, asi como tambien tenemos dos posibilidades para contenerlas, ya sea mediante la pantalla (como en este ejemplo) o mediante un archivo si lo habilitamos, pero esto es solo el comienzo ya continuaremos con mejores temas, antes de finalizar les dejo un archivo con todo los archivos del proyecto y los modificados en este post:

Anuncios

En resumen, hoy hemos visto como hacer depuracion de nuestra aplicacion, mediante cual modulo se implementa, asi como tambien con cual variable de entorno, la convencion para identificarlo y finalmente lo vimos trabajando, espero les haya resultado de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Donación

Es para mantenimento del sitio, gracias!

$1.50