UNPKG

api-stats-logger

Version:

SDK completo de logging e monitoramento de APIs com nova estrutura de logs organizada, auto-instrumentação, dashboard em tempo real e CLI para configuração automática. Suporta logs estruturados por contexto (HTTP, business, security, system) com campos op

220 lines (182 loc) 5.67 kB
const ApiStatsLogger = require('./index'); // ============================== // 1. CONFIGURAÇÃO MAIS SIMPLES - Via Environment Variables // ============================== // Configurar via .env: // API_STATS_API_KEY=sua-api-key-aqui // API_STATS_URL=http://localhost:3000/logs // API_STATS_SERVICE=example-app // API_STATS_ENVIRONMENT=development // Uso mais simples - tudo vem do .env const logger = new ApiStatsLogger(); // Lê tudo das env vars // ============================== // 2. CONFIGURAÇÃO MANUAL COMPLETA // ============================== const loggerManual = new ApiStatsLogger({ apiKey: 'sua-api-key-aqui', url: 'http://localhost:3000/logs', service: 'example-service', environment: 'development', batchSize: 5, flushInterval: 2000, captureErrors: true, // Captura erros automáticos capturePerformance: true // Métricas do sistema }); // ============================== // 3. AUTO-INSTRUMENTAÇÃO TOTAL // ============================== // Inicialização com detecção automática de framework const autoLogger = ApiStatsLogger.init({ apiKey: 'sua-api-key-aqui', service: 'auto-instrumented-app', autoDetect: true, // Detecta Express, Fastify, Koa, etc. captureHTTP: true, // Intercepta requests/responses captureDatabase: true, // Monitora queries de DB captureErrors: true, // Captura erros automáticos captureBody: false, // Não captura body por padrão captureHeaders: false // Não captura headers por padrão }); // ============================== // 4. EXEMPLOS DE USO // ============================== // Logs com métodos de conveniência logger.info('Aplicação iniciada', { port: 3000, version: '1.0.0', nodeVersion: process.version }); logger.error('Erro ao conectar no banco', { error: 'Connection timeout', database: 'postgresql', host: 'localhost' }); logger.warn('Cache miss', { key: 'user:123', service: 'cache-service' }); logger.debug('Debug info', { function: 'processUser', userId: 123, step: 'validation' }); // ============================== // 5. MIDDLEWARE MANUAL PARA EXPRESS // ============================== const express = require('express'); const app = express(); // Middleware automático para capturar todas as requisições app.use(ApiStatsLogger.expressMiddleware({ logger: logger, captureBody: true, // Captura request/response body captureHeaders: false, // Não captura headers (segurança) captureQuery: true, // Captura query parameters skipPaths: ['/health'], // Pular health checks maxBodySize: 1024 * 5 // Máximo 5KB de body })); app.get('/test', (req, res) => { logger.info('Endpoint /test acessado', { requestId: req.requestId, // ID automático da requisição ip: req.ip }); res.json({ message: 'Test endpoint', timestamp: new Date() }); }); // ============================== // 6. MIDDLEWARE PARA NESTJS // ============================== // Em seu main.ts do NestJS: /* import { ApiStatsLogger } from 'api-stats-logger'; async function bootstrap() { const app = await NestFactory.create(AppModule); app.use(ApiStatsLogger.nestMiddleware({ logger: new ApiStatsLogger(), captureBody: false, skipRoutes: ['/health', '/metrics'] })); await app.listen(3000); } */ // ============================== // 7. MONITORAMENTO DE PERFORMANCE // ============================== // Exemplo de logging de operação customizada const startTime = Date.now(); // Simular operação setTimeout(() => { const duration = Date.now() - startTime; logger.info('Operação customizada completada', { type: 'custom_operation', operation: 'processPayment', duration, success: true, metadata: { paymentId: 'pay_123', amount: 99.99, method: 'credit_card' } }); }, 100); // ============================== // 8. ESTATÍSTICAS DO LOGGER // ============================== setInterval(() => { const stats = logger.getStats(); console.log('Logger Stats:', { logs_sent: stats.sent, logs_failed: stats.failed, retries: stats.retries, buffer_size: stats.bufferSize, last_flush: stats.lastFlush }); }, 10000); // A cada 10 segundos // ============================== // 9. GRACEFUL SHUTDOWN // ============================== process.on('SIGINT', async () => { console.log('Shutting down gracefully...'); // Flush final de todos os logs await logger.close(); await loggerManual.close(); await autoLogger.close(); console.log('All logs flushed. Goodbye!'); process.exit(0); }); // ============================== // 10. TESTE DE DIFERENTES CENÁRIOS // ============================== // Simular erro setTimeout(() => { logger.error('Erro simulado', { type: 'simulated_error', component: 'test', stack: new Error('Test error').stack }); }, 1000); // Simular warning setTimeout(() => { logger.warn('Aviso simulado', { type: 'simulated_warning', message: 'This is just a test warning' }); }, 2000); // Simular múltiplos logs rápidos (teste de batching) for (let i = 0; i < 20; i++) { logger.info(`Log rápido ${i}`, { type: 'batch_test', index: i, timestamp: Date.now() }); } console.log('🚀 ApiStatsLogger example running...'); console.log('📊 Check your dashboard for logs'); console.log('🔧 Press Ctrl+C to exit gracefully'); // Start Express server se estivermos usando if (typeof app !== 'undefined') { app.listen(3001, () => { logger.info('Express server started', { type: 'server_start', port: 3001, framework: 'express' }); }); }