Ficheros de log

¿Cómo os va?
Toca hablar sobre los ficheros de log.
Seguramente, a lo largo de todo el tiempo que hayas estado trabajando con sistemas operativos, aplicaciones, programación, etcétera, habrás oído hablar de los ficheros de log o logs simplemente.
Se trata de ficheros de texto plano, que puedan ser abiertos con cualquier editor básico de texto y que contienen información más o menos útil. Y de esto es de lo que quiero hablar hoy.
Nos centraremos en tres aspectos: Qué nombre darle al fichero, Dónde guardarlos y lo más importante, Qué guardar en su interior.


Nombre

Esto puede parecer una nimiedad, pero no lo es tanto. Además, está relacionado con los otros dos aspectos a tener en cuenta. Realmente, los tres aspectos están íntimamente relacionados y hay que pensar en ellos prácticamente al unísono.
Podríamos pensar en guardar toda la información (contenido) en un único fichero de log llamado log.log o log.txt. Pero entonces debemos preguntarnos cuánta información vamos a guardar en su interior. Si prácticamente guardamos cada operación de nuestro aplicativo y/o del usuario, puede ser, que, aunque se trate de texto plano, a diario se guarde mucha información, con lo cual, este único fichero de log comenzará a pesar mucho pasados unos días. Esto supondrá un problema a la hora de editar el fichero para ver su contenido. Incluso puede ser que nuestro editor de texto no soporte la carga de tanta información, y eso puede ser una merma importante de la utilidad real del fichero de log.
Entonces, ¿cómo lo llamamos? Por mi experiencia, sería interesante habilitar algún mecanismo para darle un nombre relacionado con el día, por ejemplo. Tendríamos los ficheros de log "10_10_2019.log" o "10102019.log". Otro aspecto a tener en cuenta es dónde lo guardamos, como veremos en el siguiente apartado.

Ubicación

Si estamos trabajando con una aplicación web tipo PHP, NodeJS o ASP.NET tendremos por un lado los ficheros de código fuente, y también tendremos carpetas de recursos tipo CSS, ficheros JavaScript, imágenes, etcétera. Pues lo más acertado para los ficheros de log será que tengan también su propia carpeta. En el siguiente apartado se habla del contenido, que acabará por delimitar ciertos aspectos a tener en cuenta sobre la ubicación.

Contenido

Evidentemente, este aspecto es el más importante, pero que carece de sentido sin los otros dos. Debemos pensar en qué necesitamos guardar. No es guardar por guardar. Realmente, la información que guardamos tiene dos momentos a tener en cuenta: En el desarrollo de la aplicación y en el momento de hacer algún mantenimiento correctivo porque hay algo que no funciona como debería.
En el desarrollo de la aplicación podemos usar los ficheros de log para saber si está ocurriendo lo que tenemos planeado. Por ejemplo, podemos guardar sentencias SQL para saber si se están construyendo adecuadamente o no. O para ver el cuerpo del mensaje de un correo electrónico antes de enviarlo a un destinatario al que no podríamos acceder de otra forma.Y así vamos depurando nuestra aplicación.
Una vez que tenemos el aplicativo en producción debemos guardar la información necesaria para que en caso de algún problema, podemos averiguar qué ocurre, dónde ocurre, cuándo ocurre o quién lo provoca. Podríamos responder a todas estas interrogantes si guardamos la fecha y la hora, el usuario que está realizando la operación, el que ha iniciado la sesión y qué operación está haciendo, bien de forma genérica ("Inicio sesión", "Alta de cliente", "Modificación de factura X", ...) bien de forma más precisa, guardando, por ejemplo, la sentencia SQL completa que se lanza a la base de datos.
Podríamos tener:
[10-10-2019 12:34:23][jsanchez][UPDATE clientes SET telefonoCliente = '656676677' WHERE idCliente = 345]
Si ha habido algún fallo con la ficha de este cliente, podemos ir a la carpeta de los ficheros de log, abrir el fichero 10102019.log y buscar las operaciones realizadas por el usuario que ha dado el aviso del error (jsanchez).
Esta es la utilidad más habitual para los ficheros de log. Si construimos bien el contenido de los ficheros de log, y los estructuramos adecuadamente con el nombre y la ubicación de los mismos, buscar la solución a un problema de la aplicación puede comenzar con el análisis del fichero de log correspondiente y puede que incluso nada más ver la línea o líneas que corresponden al error, ver cuál es la solución. O al menos tenemos algo por lo que comenzar a buscar una solución.
También podemos separar el contenido por tipo de información a guardar: Errores, Advertencias, Actualizaciones, etcétera. Podríamos tener en diferentes ubicaciones (carpeta "Errores", carpeta "Acciones", ...) o con coletillas en los nombres como por ejemplo "10102019_error.log" y "10102019_operacion.log".


Ejemplo en PHP

Por último, os dejo un ejemplo realizado en PHP de guardado de un fichero de log estructurado por día:
<?php
...
$actual = date("d-m-Y");
$nombreLog = "logs/".$actual."_error.log";
$DescriptorFichero = fopen($nombreLog,"a+");
$fecha = date("d-m-Y H:i:s");
$mensajeError = "\n[$fecha][$operacion][$usuario][$mensaje]";
$mensajeError = utf8_decode($mensajeError);
fputs($DescriptorFichero,$mensajeError); 
fclose($DescriptorFichero);
...
?>
Aquí simplemente habría que darle valor a las variables $operacion, $usuario y $mensaje.



Espero os haya ilustrado un poco sobre los ficheros de logs. Espero comentarios, aportaciones, críticas (constructivas, por favor...) y sobre todo, mejoras. ¡Muchas gracias!

Comentarios

Entradas populares