@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'sinfo
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 thegetMetadata
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 areq.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 thegetMetadata
option.app.use(logMiddleware({
params: ['profile_id', 'utm_campaign'],
}));