Logging

Intermedio
Nest
Nest
Actualizado: 15/06/2025

Cómo usar el Logger de Nest

NestJS incluye un sistema de logging integrado que facilita el registro de eventos, errores y información de depuración en nuestras aplicaciones. Este logger está disponible de forma nativa y se puede utilizar tanto en controladores como en servicios mediante inyección de dependencias.

El Logger de Nest proporciona diferentes niveles de logging (log, error, warn, debug, verbose) y permite personalizar el formato y destino de los mensajes. Su integración con el sistema de inyección de dependencias lo convierte en una herramienta esencial para el monitoreo y depuración de aplicaciones.

Inyección del Logger en servicios

Para utilizar el logger en un servicio, debemos inyectarlo como dependencia en el constructor. NestJS proporciona la clase Logger que podemos importar desde @nestjs/common:

import { Injectable, Logger } from '@nestjs/common';

@Injectable()
export class ProductService {
  private readonly logger = new Logger(ProductService.name);

  findAll() {
    this.logger.log('Obteniendo todos los productos');
    // Lógica del servicio
    return [];
  }

  create(product: any) {
    this.logger.log(`Creando producto: ${product.name}`);
    try {
      // Lógica de creación
      this.logger.log(`Producto creado exitosamente: ${product.id}`);
      return product;
    } catch (error) {
      this.logger.error(`Error al crear producto: ${error.message}`);
      throw error;
    }
  }
}

En este ejemplo, creamos una instancia privada del logger pasando el nombre de la clase como contexto. Esto nos permite identificar fácilmente qué servicio generó cada mensaje de log.

Uso del Logger en controladores

Los controladores también pueden utilizar el logger de la misma manera. Es especialmente útil para registrar peticiones HTTP y sus resultados:

import { Controller, Get, Post, Body, Logger } from '@nestjs/common';

@Controller('products')
export class ProductController {
  private readonly logger = new Logger(ProductController.name);

  constructor(private readonly productService: ProductService) {}

  @Get()
  findAll() {
    this.logger.log('GET /products - Solicitando lista de productos');
    const products = this.productService.findAll();
    this.logger.log(`GET /products - Devolviendo ${products.length} productos`);
    return products;
  }

  @Post()
  create(@Body() createProductDto: any) {
    this.logger.log('POST /products - Creando nuevo producto');
    const result = this.productService.create(createProductDto);
    this.logger.log(`POST /products - Producto creado con ID: ${result.id}`);
    return result;
  }
}

Niveles de logging disponibles

NestJS proporciona cinco niveles de logging diferentes, cada uno con un propósito específico:

1 - Log: Para información general del flujo de la aplicación

this.logger.log('Usuario autenticado correctamente');

2 - Error: Para registrar errores y excepciones

this.logger.error('Error de conexión a la base de datos', error.stack);

3 - Warn: Para advertencias que no detienen la ejecución

this.logger.warn('Límite de intentos de login alcanzado para el usuario');

4 - Debug: Para información detallada útil durante el desarrollo

this.logger.debug('Parámetros recibidos en la petición', { userId, filters });

5 - Verbose: Para información muy detallada del sistema

this.logger.verbose('Iniciando proceso de validación de datos');

Logger con contexto personalizado

Podemos personalizar el contexto del logger para proporcionar información más específica sobre el origen de los mensajes:

@Injectable()
export class UserService {
  private readonly logger = new Logger('UserService');

  async authenticateUser(email: string) {
    // Logger con contexto específico para esta operación
    const authLogger = new Logger('UserService:Authentication');
    
    authLogger.log(`Iniciando autenticación para: ${email}`);
    
    try {
      // Lógica de autenticación
      authLogger.log(`Autenticación exitosa para: ${email}`);
    } catch (error) {
      authLogger.error(`Fallo en autenticación para: ${email}`, error.stack);
      throw error;
    }
  }
}

Configuración global del Logger

También podemos configurar el logger globalmente en el archivo principal de la aplicación para establecer niveles de logging y personalizar su comportamiento:

import { NestFactory } from '@nestjs/core';
import { Logger } from '@nestjs/common';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule, {
    logger: ['error', 'warn', 'log'], // Niveles activos
  });
  
  const logger = new Logger('Bootstrap');
  logger.log('Aplicación iniciada correctamente');
  
  await app.listen(3000);
}
bootstrap();

Esta configuración permite controlar qué niveles de logging se muestran en la consola, lo cual es útil para diferentes entornos (desarrollo, producción, testing).

Fuentes y referencias

Documentación oficial y recursos externos para profundizar en Nest

Documentación oficial de Nest
Alan Sastre - Autor del tutorial

Alan Sastre

Ingeniero de Software y formador, CEO en CertiDevs

Ingeniero de software especializado en Full Stack y en Inteligencia Artificial. Como CEO de CertiDevs, Nest es una de sus áreas de expertise. Con más de 15 años programando, 6K seguidores en LinkedIn y experiencia como formador, Alan se dedica a crear contenido educativo de calidad para desarrolladores de todos los niveles.

Más tutoriales de Nest

Explora más contenido relacionado con Nest y continúa aprendiendo con nuestros tutoriales gratuitos.

Aprendizajes de esta lección

  • Comprender cómo utilizar el Logger de NestJS en servicios y controladores mediante inyección de dependencias.
  • Identificar y aplicar los diferentes niveles de logging disponibles en NestJS.
  • Personalizar el contexto del Logger para mejorar la trazabilidad de los mensajes.
  • Configurar globalmente el Logger para controlar los niveles de logging activos según el entorno.
  • Integrar el Logger para facilitar el monitoreo y la depuración de aplicaciones NestJS.