Header Ads Widget

Logs para aplicaciones NET - Consejos y recomendaciones


Tener un log en una aplicaciĆ³n es muy importante e indispensable, no solamente para registrar errores, sino que nos permite saber si el sistema estĆ” funcionando de la forma en que se espera. Por eso es un error considerar que un log sea solo para errores.

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.


Publicar un comentario

0 Comentarios