Por su significado literal del Diccionario de Oxford, la palabra «log» puede definirse como «un registro oficial de eventos durante un período de tiempo determinado, especialmente un viaje en un barco o avión». En el ámbito de la programación, los programadores utilizan este término también para mantener un registro de los eventos y actividades importantes que son importantes para que un programa funcione correctamente. La actividad o creación de un registro se denomina logging y las herramientas para realizar dicha tarea se denominan logger.
El registro se documenta en un archivo llamado Log File. En el término de programador de computadoras, Un archivo de registro podría describirse como
un archivo que mantiene un registro de eventos, procesos, mensajes y comunicación entre varias aplicaciones de software que se comunican y el sistema operativo. Los archivos de registro están presentes en el software ejecutable, los sistemas operativos y los programas mediante los cuales se registran todos los mensajes y detalles de los procesos. Cada archivo ejecutable produce un archivo de registro donde se anotan todas las actividades.
– Technopedia
Un archivo de registro es importante para nosotros los programadores para mantener un registro de eventos importantes para ciertos casos como la depuración, la evaluación y el seguimiento. En este artículo, me gustaría compartir una forma de crear un simple paquete logger para ser implementado en el lado del servidor con Golang.
Paquete Logger en Golang
Nuestro código comienza con la declaración de una cláusula de paquete llamada «logger» y la importación de los paquetes requeridos: «fmt», «log», «os» y «path/filepath». Utilizaremos dos tipos de logger: Log común y Log de errores. El primero se utiliza para registrar eventos comunes como el inicio de sesión, el cierre de sesión, la obtención de datos, la publicación de datos, etc. Por otro lado, el segundo se utiliza para registrar específicamente los eventos de error. En su núcleo, nuestro registrador está construido sobre un objeto log. Por lo tanto, vamos a crear dos variables «CommonLog» y «ErrorLog» (nota la primera letra está en mayúsculas para denotar que la variable es exportada) con un puntero a la estructura del logger.
package loggerimport (
"fmt"
"log"
"os"
"path/filepath"
)var CommonLog *log.Loggervar ErrorLog *log.Logger
A continuación, vamos a iniciar nuestro logger. Vamos a empezar por declarar la ruta del archivo. Lo hacemos señalando la ubicación de nuestro archivo de registro utilizando el comando Abs del paquete de rutas de archivo (en este caso estamos utilizando la ubicación absoluta del archivo de registro). Luego mantenemos la referencia dentro de la variable filePath.
Dentro de la función init, continuamos estableciendo el comando que será ejecutado cuando el archivo de registro sea abierto por el programa (este ajuste es referenciado dentro de la variable openLogfile). Hacemos esto con el comando «OpenFile» del paquete «os» especificando la ruta del archivo (usando nuestra variable «filePath» además del nombre del archivo), flags y fileMode. En esta parte también tenemos que decidir el nombre del archivo de registro; en este artículo, nombramos el archivo de registro como log.log (observe la extensión log). Atención especial a las banderas y al fileMode utilizados en la función. En este caso, las banderas pueden describirse como indicadores que le dicen al programa qué hacer con el archivo abierto. Para ello, utilizamos la constante predefinida del paquete «os»:
- os.0_RDWR = abrir el fichero en lectura-escritura
- os.0_CREATE = crear un nuevo fichero si no existe
- os.0_APPEND = añadir datos al archivo cuando se escribe
Mientras tanto el fileMode «0666» es el código para establecer el permiso de archivo por defecto para modificar el archivo (se puede leer más sobre el permiso del usuario aquí).
Además, vamos a reescribir nuestra variable CommonLog y ErrorLog para contener un nuevo registro. Hacemos esto con el comando «New» del paquete «log» especificando 1) el canal para el archivo de registro, 2) un prefijo y 3) banderas requeridas.
- Canal para el archivo de registro: aquí usamos nuestra variable openLogfile
- Prefijo: Este es el identificador o nuestro registro. Podríamos utilizar la palabra de cadena personalizada para definir el tipo de lof (es decir, «CommonLogger» o «ErrorLogger»)
- Flags: Las banderas para esta función denota la información que queremos tener en nuestro registro. Para ello, utilizamos la función incorporada del paquete log en Go (el detalle se puede ver aquí).
Inyectando Logger a nuestro código
Por último, podríamos inyectar nuestro logger para registrar eventos importantes que estén ocurriendo en nuestro programa. Esto se puede hacer usando el comando «Prinln» como el que usamos con el paquete «fmt».
Aquí en el archivo de registro, el resultado del logger tomará la forma como esta:
¡Está Hecho!
Así que, ¡eso es chicos! hemos creado un paquete logger que puede ser fácilmente inyectado como una dependencia en nuestro programa Go. Esperemos que os sea útil a los compañeros programadores.