Winston Elasticsearch Transport Indexing
Ship Winston logs to Elasticsearch with bulk indexing, retry on rejection, and index rotation mapping that keeps queries fast over time.
Code
import winston from 'winston';
import 'winston-elasticsearch';
const esTransport = new winston.transports.Elasticsearch({
index: 'svc-logs',
indexPrefixTemplate: 'svc-logs',
clientOpts: { node: 'http://elastic:9200' },
buffering: true,
bufferLimit: 500,
flushInterval: 5_000,
ensureIndexTemplate: true,
retryLimit: 3,
});
export const logger = winston.createLogger({
level: 'info',
defaultMeta: { service: 'search-api', env: process.env.NODE_ENV },
format: winston.format.combine(
winston.format.timestamp({ format: 'YYYY-MM-DDTHH:mm:ss.SSSZ' }),
winston.format.json(),
),
transports: [esTransport],
});
logger.info('query served', { query: 'blue shoes', tookMs: 18, hits: 231 });
logger.warn('slow query', { query: 'umbrella', tookMs: 950 });
logger.error('upstream timeout', { shard: 's-3', retry: 1 });
esTransport.on('error', (err) => {
process.stderr.write('es transport failed: ' + err.message + '\n');
});Report a problem with this exampleOpens a pre-filled issue on GitHub.