A Winston transport for AWS CloudWatch Logs that provides buffered logging capabilities.
This library is meant to replace the existing transport https://github.com/lazywithclass/winston-cloudwatch. The existing winston-cloudwatch library, while functional, has several limitations and challenges that our new implementation addresses:
- Built with modern TypeScript, providing better type safety and developer experience
- Uses AWS SDK v3
- Optimized batching algorithm that reduces AWS API calls
- Better handling of high-throughput logging scenarios
yarn add @initd.sg/winston-cloudwatch
- AWS credentials properly configured (either through environment variables, AWS CLI, or IAM roles)
- AWS SDK v3
- Winston 3.x
import winston from 'winston';
import { WinstonCloudwatch } from '@initd.sg/winston-cloudwatch';
const logger = winston.createLogger({
transports: [
new WinstonCloudwatch({
logGroupName: 'your-log-group-name',
logStreamName: 'your-log-stream-name',
logBufferSize: 500, // optional
timeout: 1000 // optional
})
]
});
// Use the logger
logger.info('Hello CloudWatch!');
Option | Type | Required | Default | Description |
---|---|---|---|---|
logGroupName | string | Yes | - | The name of the CloudWatch log group |
logStreamName | string | Yes | - | The name of the CloudWatch log stream |
logBufferSize | number | No | 500 | Maximum number of logs to buffer before sending to CloudWatch |
timeout | number | No | 1000 | Time in milliseconds to wait before flushing the buffer |
- Buffered logging to reduce API calls to CloudWatch
- Automatic handling of sequence tokens
- Non-blocking logging operations
- Configurable buffer size and timeout
- Compatible with Winston 3.x
The transport implements a buffering mechanism that:
- Collects logs until the buffer size is reached
- Automatically flushes the buffer when the timeout is reached
- Maintains the sequence token for proper log ordering
Errors during log upload are caught and logged to console, ensuring your application continues to run even if CloudWatch is temporarily unavailable.
Make sure you have the necessary AWS permissions to:
- Describe log streams
- Put log events
- Create log streams (if they don't exist)
Contributions are welcome! Please feel free to submit a Pull Request.
- @aws-sdk/client-cloudwatch-logs
- winston-transport
This transport is designed for use in Node.js environments and requires proper AWS credentials configuration.
https://medium.com/@initd.sg/logging-to-aws-cloudwatch-with-winston-in-typescript-e7b54cc15f2d