59 lines
1.4 KiB
JavaScript
59 lines
1.4 KiB
JavaScript
// Copyright IBM Corp. 2014,2015. All Rights Reserved.
|
|
// Node module: loopback
|
|
// This file is licensed under the MIT License.
|
|
// License text available at https://opensource.org/licenses/MIT
|
|
|
|
var bunyan = require('bunyan');
|
|
var loopback = require('../../lib/loopback');
|
|
var util = require('util');
|
|
|
|
module.exports = loggerMiddleware;
|
|
|
|
function loggerMiddleware(options) {
|
|
//console.log('typeof this mdidleware', this.get('restApiRoot'));
|
|
console.log('log-middleware options: ', options);
|
|
var defaultOptions = {
|
|
name: 'Loopback',
|
|
// decides what to log
|
|
log: {
|
|
request: true,
|
|
},
|
|
streams: [],
|
|
};
|
|
var options = util._extend(defaultOptions, options);
|
|
var logger = bunyan.createLogger({name: 'app'});
|
|
|
|
|
|
return function(req, res, next) {
|
|
var app = req.app;
|
|
|
|
// use singleton instance of logger?
|
|
if (!app.get('logger')) {
|
|
app.set('logger', logger);
|
|
}
|
|
|
|
if (options.log.request) {
|
|
bindMethod(req, res, logRequest);
|
|
}
|
|
|
|
next();
|
|
};
|
|
|
|
function bindMethod(req, res, method) {
|
|
res.on('finish', function() { method(req, res); });
|
|
}
|
|
|
|
function logRequest(req, res) {
|
|
var remoteMethod = req.remotingContext.methodString;
|
|
var data = {
|
|
action: options.log.request.action || 'request',
|
|
verb: req.method,
|
|
path: req.url,
|
|
statusCode: res.statusCode,
|
|
remoteMethod: remoteMethod,
|
|
};
|
|
//log data
|
|
logger.info(data);
|
|
}
|
|
};
|