Saltearse al contenido

Logging

Aprende cómo implementar logging estructurado en tus aplicaciones Veloce-TS usando Pino, uno de los loggers más rápidos para Node.js.

Veloce-TS proporciona logging integrado con:

  • Integración Pino - Logging JSON estructurado y rápido
  • Child Loggers - Logging contextual con herencia
  • Niveles de Log - trace, debug, info, warn, error, fatal
  • Integración Request ID - Rastreo automático de peticiones
  • Pretty Printing - Logs legibles en desarrollo
import { getLogger } from 'veloce-ts';
const logger = getLogger();
logger.info('Aplicación iniciada');
logger.error('Algo salió mal', new Error('Detalles del error'));
import { initializeLogger } from 'veloce-ts';
// Desarrollo - Pretty printing
initializeLogger({
level: 'debug',
pretty: true
});
// Producción - Salida JSON
initializeLogger({
level: 'info',
pretty: false
});
logger.trace('Información muy detallada');
logger.debug('Información de depuración');
logger.info('Información general');
logger.warn('Mensaje de advertencia');
logger.error('Ocurrió un error', error);
logger.fatal('Error fatal', error);

Crear loggers contextuales:

@Controller('/users')
class UserController {
private logger = getLogger().child({ component: 'UserController' });
@Get('/:id')
async getUser(@Param('id') id: string, @RequestId() requestId: string) {
const logger = this.logger.child({ requestId, userId: id });
logger.info('Obteniendo usuario');
// ... lógica
logger.info('Usuario obtenido exitosamente');
}
}
logger.info({
userId: '123',
action: 'login',
ip: '192.168.1.1'
}, 'Usuario inició sesión');
// Salida (JSON):
// {
// "level": 30,
// "time": 1234567890,
// "userId": "123",
// "action": "login",
// "ip": "192.168.1.1",
// "msg": "Usuario inició sesión"
// }

Con el middleware de request context, el request ID aparece automáticamente en los logs:

app.use(createRequestContextMiddleware({ logging: true }));
@Get('/data')
async getData(@RequestId() requestId: string) {
logger.info('Procesando petición'); // Incluye requestId automáticamente
}
// Bien
const logger = getLogger().child({ component: 'Service' });
// Mejor
const logger = getLogger().child({
component: 'UserService',
version: '1.0'
});
logger.info({ userId, action: 'update' }, 'Usuario actualizado');
try {
await riskyOperation();
} catch (error) {
logger.error({ error, userId }, 'Operación falló');
throw error;
}