relu-core
Version:
66 lines (46 loc) • 1.29 kB
JavaScript
// Copyright 2012 Mark Cavage, Inc. All rights reserved.
;
var assert = require('assert-plus');
var shallowCopy = require('../utils').shallowCopy;
///--- API
/**
* attaches bunyan logger to the request.
* @public
* @function requestLogger
* @param {Object} options an options object
* @returns {Function}
*/
function requestLogger(options) {
assert.optionalObject(options);
options = options || {};
var props;
if (options.properties) {
props = shallowCopy(options.properties);
} else {
props = {};
}
if (options.serializers) {
props.serializers = options.serializers;
}
var headersToCopy = options.headers || [];
return function bunyan(req, res, next) {
if (!req.log && !options.log) {
next();
return;
}
var log = req.log || options.log;
props.req_id = req.getId();
headersToCopy.forEach(function (k) {
if (req.headers[k]) {
props[k] = req.headers[k];
}
});
req.log = log.child(props, props.serializers ? false : true);
if (props.req_id) {
delete props.req_id;
}
next();
};
}
///--- Exports
module.exports = requestLogger;