@bufferapp/logger
v1.0.3
Published
Logging for Buffer.com's node applications
Downloads
87
Maintainers
Keywords
Readme
@bufferapp/logger
Provides standard middleware and functions for logging to stdout. In our production cluster these logs will be indexed in our application-logs Elasticsearch cluster as well as get backed up in s3.
Install
npm install @bufferapp/logger -SE
Usage
To log something, use the logger's info
method which takes 2 arguments, an object for
structured logging and a string for a message:
logger.info(<Object>, <String>);
To use as a normal logger, require and create the logger:
const logger = require('@bufferapp/logger')({ name: 'Some-Worker' });
function run(data) {
// log something one-off...
logger.info({
metadata: {
service: data.service,
},
stats: {
processingTime: data.time,
count: data.count,
}
}, `Successfully processed ${data.count} items`);
}
Middleware
const logMiddleware = require('@bufferapp/logger/middleware');
app = express();
app.use(logMiddleware({ name: 'My-App' }));
// ...other middleware and route handlers
Metadata
Add application metadata to your logs using the getMetadata
option.
app.use(logMiddleware({
getMetadata: (req) => {
return {
userId: req.session.userId,
profileId: req.query.profileId,
};
},
}));
Stats
Add application stats to your logs. You receive the request object and the response time in
milliseconds. For example, you can add tracking metrics to a req.trackingData
attribute and
then handle them in your getStats
method:
app.use(logMiddleware({
name: 'My-App',
getStats: (req, responseTime) => {
return {
responseTime,
processingTime: responseTime - req.trackingData.externalRequestTime,
imagesScanned: req.trackingData.imagesScanned,
};
},
}));
// In your request handler
app.get('/get-images', (req, res) => {
req.trackingData = {};
getImages(req.url, (images) => {
req.trackingData.imagesScanned = images.length;
res.json(images);
});
});
Params
Add logging of specific query string params using the getMetadata
option.
app.use(logMiddleware({
params: ['profile_id', 'utm_campaign'],
}));