Los sistemas modernos han incrementado la conexiĆ³n entre microservicios y APIs y monitorear dichas conexiones pueden llegar a ser un gran reto.
Un log irrelevante es peor que no tener un log, ya que da una falsa sensaciĆ³n de seguridad. Un log con informaciĆ³n mĆnima o poco importante nos hace perder tiempo. Crear y mantener un log implica tiempo, y en ocasiones los plazos apresurados relegan los logs a la sombra y empiezan a descuidarse.
1. Niveles de log
Cuando se tiene un log tambiƩn se pueden tener niveles, y en este caso "nivel" se refiere al tipo y la cantidad de mensajes registrados en el log.
Nivel de traza (trace)
El nivel de traza registra cada mensaje producido en el sistema, incluyendo informaciĆ³n sensible. Definitivamente no queremos esto en producciĆ³n, pero si en nuestro ambiente de desarrollo, ya que nos permite monitorear el comportamiento de nuestro sistema.
Nivel de depuraciĆ³n (debug)
Este nivel nos permite realizar una "investigaciĆ³n" del comportamiento de la funcionalidad del sistema, es para casos puntuales de depuraciĆ³n, y no valdrĆa mantener registro de este nivel en producciĆ³n, solo en desarrollo.
Nivel informativo (information)
Registra mensajes que permitan el flujo general de la aplicaciĆ³n, considero que esto si se deberĆa mantener en el log, nos da oportunidad de conocer el camino de cada proceso, lo cual nos permite descartar errores que no pertenecen a un flujo en particular.
Nivel de advertencia (warning)
Estos mensajes registrados nos indicarĆ”n un proceso anormal o inesperado, que sin embargo no causarĆ”n que la aplicaciĆ³n se detenga.
Nivel de error (error)
Estos son los mensajes cuando el flujo actual de ejecuciĆ³n es detenido debido a un fallo. Se deberĆa indicar en el log el fallo en la actividad actual, no un fallo a nivel de aplicaciĆ³n.
Nivel crĆtico (critical)
Este log describe un cuelgue o error catastrĆ³fico que hace imposible continuar con la ejecuciĆ³n de la aplicaciĆ³n, un mensaje de nivel crĆtico requiere atenciĆ³n inmediata.
2. LibrerĆas para logs en .NET
El .NET framework cuenta con el ensamblado Microsoft Logging, que cubre las necesidades bĆ”sicas de logging, y puede ser usado en cualquier tamaƱo de sistema. Pero como cada sistema es diferente, cada sistema y organizaciĆ³n requiere un nivel de detalle y personalizaciĆ³n diferente, que el ensamblado nativo no cubre.
Existen las librerĆas como Serilog, que a este aƱo (2022) es muy popular. Proporciona logs para archivo, consola y muchos otros destinos. Ninguna librerĆa es perfecta o adecuada. Cada uno tiene sus necesidades y gustos, y lo importante es implementar el log y hacerlo de forma que la informaciĆ³n registrada sea Ćŗtil e importante.
3. Mejores prƔcticas y recomendaciones
Logs estructurados
Los mensajes registrados en el log debe poder filtrarse para poder buscar en ellos. Un log que deba ser revisado lĆnea por lĆnea para encontrar el error, es en sĆ un error y un agujero por donde se pierde tiempo. Los mensajes deben ser tipo plantilla.
En producciĆ³n solo deben estar habilitados los logs apropiados
Antes de publicar la aplicaciĆ³n en producciĆ³n, se debe analizar la verdadera necesidad de cada nivel de log. Un log con demasiada informaciĆ³n es igual a un log con poca informaciĆ³n. Los logs de nivel traza y depuraciĆ³n deben estar deshabilitados en producciĆ³n.
Usar una librerĆa de terceros
No hay que reinventar la rueda. No gastemos tiempo y recursos para recrear una funcionalidad completa de logs, cuando ya existen librerĆas gratuitas y de pago. Y sobre eso, verificar que la librerĆa que se estĆ” usando pueda ser utilizada en producciĆ³n, y no estar en problemas cuando nos demos cuenta que estamos usando una versiĆ³n limitada o pirata.
InformaciĆ³n sensible
En logs de producciĆ³n no se debe registrar informaciĆ³n sensible o privada. InformaciĆ³n del usuario como contraseƱas, nĆŗmeros de tarjeta de crĆ©dito o cualquier dato que no deba ser pĆŗblico, no debe ser registrada en el log. Un log no necesariamente estĆ” encriptada, y si llega a exponerse pĆŗblicamente, serĆa un gran fallo de seguridad.
Mensajes de log relevantes
Un mensaje de log registrado en el log no significa que el sistema estĆ” preparado para ser analizado, porque el mensaje podrĆa no tener mucho sentido.
Entonces, cuando registres algo en el log, piensa que informaciĆ³n serĆ” relevante para un futuro anĆ”lisis de la ejecuciĆ³n. Por ejemplo, en un bloque de excepciĆ³n, el mensaje o aĆŗn mejor, toda la excepciĆ³n debe ser registrada en el log. Y el mĆ©todo donde se estĆ” registrando el mensaje, debemos tener su nombre.
4. ConclusiĆ³n
Aunque gran parte de este artĆculo se refiere a buenas prĆ”cticas para escribir logs eficientes en nuestras aplicaciones, estos consejos no deben considerarse reglas absolutas. Cada organizaciĆ³n o sistema tienen diferentes contextos y hay que ser flexibles en la aplicaciĆ³n de estos consejos.
0 Comentarios