From 80e7fa6fef7b8a4532ec00fc6b639aa69a2b975b Mon Sep 17 00:00:00 2001 From: David Cheung Date: Thu, 9 Jun 2016 12:10:44 -0400 Subject: [PATCH] Standard logger middleware for loopback --- package.json | 1 + server/middleware/logger.js | 55 +++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 server/middleware/logger.js diff --git a/package.json b/package.json index 53d7e6c9..99af1365 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "bcryptjs": "^2.1.0", "bluebird": "^3.1.1", "body-parser": "^1.12.0", + "bunyan": "^1.8.1", "canonical-json": "0.0.4", "continuation-local-storage": "^3.1.3", "debug": "^2.1.2", diff --git a/server/middleware/logger.js b/server/middleware/logger.js new file mode 100644 index 00000000..f11d9694 --- /dev/null +++ b/server/middleware/logger.js @@ -0,0 +1,55 @@ +// 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 = logger; + +function logger(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 data = { + action: options.log.request.action || 'request', + verb: req.method, + path: req.url, + statusCode: res.statusCode, + }; + logger.info(data); + } +};