
Security News
Feross on Risky Business Weekly Podcast: npm’s Ongoing Supply Chain Attacks
Socket CEO Feross Aboukhadijeh joins Risky Business Weekly to unpack recent npm phishing attacks, their limited impact, and the risks if attackers get smarter.
cloudwatchlogger
Advanced tools
Module to log directly to AWS CloudWatchLogs in NodeJS
cloudwatchlogger
is a module that allows your Node.js app to send logs
directly to AWS CloudWatchLogs.
Install the module with: npm install cloudwatchlogger --save
Install the module as a CLI tool npm install cloudwatchlogger -g
You can use the module by requiring and creating an instance of the logger by providing the AWS credentials and other options.
const Logger = require('cloudwatchlogger');
new Logger(OPTS).setupLogger('myGroupNameTest', 'myStreamNameTest',
function(err, logger) {
// logger is your actual logger instance
}
Once you have the logger
, you can call .log()
function
logger.log('Some Text'); // string
logger.log(42); // number
logger.log(true); // boolean
logger.log({test:true}); // JSON
Logger OPTS allows you to pass in AWS credentials and few more options to control cloudwatchlogger behaviour.
OPTS needs to be a JSON like this:
{
"accessKeyId": "XXXXX", // required
"secretAccessKey": "YYYYY", // required
"region": "us-west-2", // required
"logLevel": "trace", // [optional] Use `Trace` if you want to see library logs
"batchSize": 1024, // [optional] Messages are sent in batches of this size
"batchDelay": 3000, // [optional] Delay before it sends if no messages are logged
"maxRetries": 2 // [optional] Num of retries if posting to AWS fails
}
'use strict'
const restify = require('restify');
const Logger = require('cloudwatchlogger');
let logger = null;
const server = restify.createServer({name: 'app'});
const opts = {
"accessKeyId": "XXXXX", // required
"secretAccessKey": "YYYYY", // required
"region": "us-west-2", // required
"logLevel": "trace", // [optional] Use `Trace` if you want to see library logs
"batchSize": 1024, // [optional] Messages are sent in batches of this size
"batchDelay": 3000, // [optional] Delay before it sends if no messages are logged
"maxRetries": 2 // [optional] Num of retries if posting to AWS fails
};
/*
or, ask logger to read the AWS config from file json file
const opts = {
"file":"./aws.config.json",
"logLevel": "trace",
"batchSize": 1024,
"batchDelay": 3000,
"maxRetries": 2
}
*/
server.pre( (req, res, next) => {
req.id = 'RandomId123';
// Example: Req object is circular with lots of other info
// you would want to serialize it to a format that suits you
logger.log({ method: req.method,
url: req.url,
id: req.id, // Example - assign and log a req id
// later you can query in CloudWatchLogger with
headers: req.headers,
remoteAddress: req.connection.remoteAddress,
remotePort: req.connection.remotePort });
next();
});
server.get('/', (req, res) => {
logger.log('Some Text'); // string
logger.log(42); // number
logger.log(true); // boolean
logger.log({test:true}); // JSON
logger.log({
statusCode: res.statusCode,
id: req.id,
header: res._header
});
res.send('hello world');
next();
});
server.listen(3003, () => {
// get an instance of logger and pass in the AWS CloudWatchLogs Group Name
// and Stream Name
// If GroupName or StreamName does not exists, library will create one for
// you
new Logger(opts).setupLogger('myGroupNameTest', 'myStreamNameTest',
function(err, loggerInstance) {
// you get back a loggerInstance when it establishes that log group
// and log streams are valid
logger = loggerInstance;
console.log('Server listening on 3003 with CloudWatchLogger');
});
});
cloudwatchlogger -h
Usage: cloudwatchlogger [options]
Options:
-h, --help output usage information
-V, --version output the version number
-a, --accessKeyId <accessKeyId> AWS Access Key Id
-s, --secretAccessKey <secretAccessKey> AWS Secret Access Key
-r, --region <region> AWS Region
-l, --logStreamName <logStreamName> CloudWatch Log Stream Name
-g, --logGroupName <logGroupName> Cloud Watch Log Group Name
-f, --file <pathToFile> or, Config JSON file containing AWS Credentials
-d, --debug [optional] Enables debug logs for this library
-m, --maxRetry <value> [optional] Max retries per log batch
-b, --batchSize <value> [optional] Batch size
You can use cloudwatchlogger
to stream output from one source into AWS CloudWatchLogs.
Example: The following will stream all the output from node server.js
directly to AWS.
node server.js | cloudwatchlogger -f aws.config.json -g loggingGroup -l loggingStream
Ensure that all linting and codestyle tasks are passing. Add unit tests for any new or changed functionality.
To start contributing, install the git prepush hooks:
make githooks
Before committing, lint and test your code using the included Makefile:
make prepush
If you have style errors, you can auto fix whitespace issues by running:
make codestyle-fix
Copyright (c) 2017 Rajat Kumar
Licensed under the MIT license.
FAQs
Module to log directly to AWS CloudWatchLogs in NodeJS
We found that cloudwatchlogger demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Socket CEO Feross Aboukhadijeh joins Risky Business Weekly to unpack recent npm phishing attacks, their limited impact, and the risks if attackers get smarter.
Product
Socket’s new Tier 1 Reachability filters out up to 80% of irrelevant CVEs, so security teams can focus on the vulnerabilities that matter.
Research
/Security News
Ongoing npm supply chain attack spreads to DuckDB: multiple packages compromised with the same wallet-drainer malware.