Registro en aplicaciones TypeScript: mejores prácticas para principiantes

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción al registro en aplicaciones TypeScript

\n\n

El registro es el proceso de registrar eventos que ocurren durante la ejecución de un programa. Para aplicaciones TypeScript, especialmente aquellas que se ejecutan en el entorno Node.js, un registro bien configurado no es solo una buena práctica, sino una herramienta críticamente importante para la depuración, monitoreo y análisis de errores.

\n\n

Muchos desarrolladores principiantes se limitan a usar console.log(). Sin embargo, en un entorno de producción este enfoque es ineficaz: no permite gestionar de forma flexible los niveles de importancia, filtrar mensajes o guardarlos en archivos. En este artículo, analizaremos cómo crear un sistema de registro profesional en TypeScript desde cero.

\n\n

¿Por qué no deberías usar console.log en producción?

\n\n

Veamos un ejemplo típico:

\n\n
// Mal enfoque: usamos console.log directamente\nfunction processOrder(orderId: string): void {\n  console.log(`Processing order ${orderId}`);\n  try {\n    // lógica de negocio\n  } catch (error) {\n    console.error(`Error processing order: ${error}`);\n  }\n}\n
\n\n

Problemas de este enfoque:

\n
    \n
  • Falta de niveles de registro: no se pueden separar mensajes de depuración de errores críticos.
  • \n
  • Sin formato: es difícil leer grandes volúmenes de datos.
  • \n
  • No se puede redirigir: todos los mensajes van solo a stdout/stderr.
  • \n
  • Problemas de rendimiento: la escritura síncrona en la consola puede ralentizar la aplicación.
  • \n
\n\n

Mejores prácticas de registro en TypeScript

\n\n

1. Elección de una biblioteca de registro

\n\n

Para TypeScript se recomienda usar una de las dos bibliotecas populares:

\n
    \n
  • Winston — un registrador potente y flexible con soporte para transportes (archivo, consola, bases de datos).
  • \n
  • Pino — un registrador ultrarrápido, ideal para aplicaciones de alta carga.
  • \n
\n\n

Instalemos Winston:

\n
npm install winston\nnpm install @types/winston --save-dev\n
\n\n

2. Creación de un registrador configurable

\n\n

Creemos el módulo logger.ts:

\n\n
import winston from 'winston';\n\nconst logger = winston.createLogger({\n  level: process.env.LOG_LEVEL || 'info',\n  format: winston.format.combine(\n    winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),\n    winston.format.errors({ stack: true }),\n    winston.format.json()\n  ),\n  transports: [\n    new winston.transports.Console({\n      format: winston.format.combine(\n        winston.format.colorize(),\n        winston.format.simple()\n      )\n    }),\n    new winston.transports.File({ \n      filename: 'logs/error.log', \n      level: 'error' \n    }),\n    new winston.transports.File({ \n      filename: 'logs/combined.log' \n    })\n  ]\n});\n\nexport default logger;\n
\n\n

Ahora podemos usar el registrador en cualquier módulo:

\n
import logger from './logger';\n\nfunction getUser(id: string) {\n  logger.info(`Fetching user with ID: ${id}`);\n  try {\n    // lógica para obtener usuario\n    logger.debug('User data retrieved successfully');\n  } catch (error) {\n    logger.error('Failed to fetch user', { userId: id, error });\n  }\n}\n
\n\n

3. Uso de niveles de registro

\n\n

Niveles estándar (del menos importante al más importante):

\n
    \n
  • debug — información detallada de depuración (solo para desarrollo).
  • \n
  • info — mensajes informativos estándar.
  • \n
  • warn — advertencias sobre problemas potenciales.
  • \n
  • error — errores que requieren atención.
  • \n
\n\n

Configure el nivel de registro mediante variables de entorno:

\n
// En el archivo .env\nLOG_LEVEL=debug  # para desarrollo\nLOG_LEVEL=warn   # para producción\n
\n\n

4. Registro estructurado

\n\n

Pase informaci

Blogs

Book Recommendations