Encontrar posibles errores en la ejecución de un código puede ayudar a la detección temprana de errores. Suponiendo que nuestro programa almacena logs de la ejecución de los programas es posible extraer los mensajes de error de los mismos si estos manejan un formato. Para el propósito de este tutorial nos bastará con asumir que, en el log de errores, un error se identifica por estar precedido por la palabra error:.
Asimismo, asumiremos que nuestro servidor cuenta con varios proyectos que se ejecutan en paralelo, por lo que es necesario revisar los logs de errores de cada uno. De esta forma, es posible establecer un algoritmo sencillo que permita ubicar donde se ha generado un error en nuestro código:
Vamos a ir paso por paso a ver que necesitamos en cada uno
Esta tarea requiere el uso del comando find, el cual se encarga de buscar los archivos que están en una ruta específica. El uso del mismo se da de la siguiente forma
find<ruta> -name <nombre>
Donde ruta especifica el directorio sobre el cual se ejecutará la búsqueda y nombre es un wildcard que nos ayuda a identificar los archivos. En nuestro caso específico, estamos asumiendo que los errores quedan almacenados en un archivo .log que se genera automáticamente por las aplicaciones que se corren en el servidor. Dado que nos interesa hacer un barrido de todos los archivos del computador, el primer paso para lograr el cometido será estar sobre la carpeta home, la cual se puede acceder mediante el comando
cd ~
De esta forma, podemos ejecutar estos comandos de forma sincrónica tal que permita acceder a los archivos .log de la máquina
cd ~ && find ./ --name *-log
Cuyo resultado debe asemejarse a
.//log.log
.//dir2/log.log
.//dir1/log.log
Completando el primer paso para cumplir el objetivo
A continuación, es necesario buscar todas las líneas de los archivos que contengan el formato de error previamente definido. Para ello, contamos con el comando grep que busca expresiones regulares dentro de archivos. El uso del mismo se da de la siguiente forma
grep<regex>file
De esta forma, sería posible concatenar la salida del comando file a grep con el fin de obtener las lineas de error tal que
find ./ --name *-log | grep error
Sin embargo, este comando no funciona según lo esperado, puesto que grep buscará las lineas que de error en las lineas de output del comando find. Para ello usamos el comando xargs que ejecutará el comando grep para cada una de las lineas de salida de find. De esta forma, el comando a ejecutar se vería de la siguiente forma
cd ~&& find ./ --name *-log | xargs grep error
cuyo resultado se ve a continuación
.//log.log:error: Error genérico
.//log.log:error: usuario no encontrado
.//dir2/log.log:error: Usuario no registrado
.//dir2/log.log:error: Usuario y contraseña no corresponden
.//dir1/log.log:error: no encontrado js package
.//dir1/log.log:error: por favor instaler paquete
cd ~&& find ./ --name *-log | xargs grep error > errores.txt
Tal como se ve en el proceso, es posible crear un script en la terminal que encuentre automáticamente todos los errores que han producido nuestras aplicaciones. Espero que el tutorial les sirva en sus proyectos futuros