From 5e73bc9f1c48669961cf39c9cfb1f4eec31f8554 Mon Sep 17 00:00:00 2001 From: Matteo Pagliazzi Date: Tue, 3 Nov 2015 17:47:16 +0100 Subject: [PATCH] adds logger and starts logging errors --- package.json | 2 +- website/src/libs/api-v3/logger.js | 21 +++++++++++++++++++ .../src/middlewares/api-v3/errorHandler.js | 10 +++++++-- 3 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 website/src/libs/api-v3/logger.js diff --git a/package.json b/package.json index a9117cd89b..7b08df56df 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "swagger-node-express": "lefnire/swagger-node-express#habitrpg", "universal-analytics": "~0.3.2", "validator": "~3.19.0", - "winston": "~0.8.0", + "winston": "~2.0.1", "winston-mail": "~0.2.9", "winston-newrelic": "~0.1.4" }, diff --git a/website/src/libs/api-v3/logger.js b/website/src/libs/api-v3/logger.js new file mode 100644 index 0000000000..e40aed7b99 --- /dev/null +++ b/website/src/libs/api-v3/logger.js @@ -0,0 +1,21 @@ +'use strict'; + +// Logger utility +// TODO remove winston-mail and winston-newrelic if not used +let winston = require('winston'); +let nconf = require('nconf'); + +// TODO use const? +// TODO move isProd to a single location +let isProd = nconf.get('NODE_ENV') === 'production'; + +let logger = new winston.Logger(); + +if (isProd) { + // TODO production logging +} else { + logger + .add(winston.transports.Console); +} + +module.exports = logger; \ No newline at end of file diff --git a/website/src/middlewares/api-v3/errorHandler.js b/website/src/middlewares/api-v3/errorHandler.js index b964bcd6c9..bd4435b1cc 100644 --- a/website/src/middlewares/api-v3/errorHandler.js +++ b/website/src/middlewares/api-v3/errorHandler.js @@ -2,13 +2,19 @@ // The error handler middleware that handles all errors // and respond to the client - +let logger = require('../../libs/api-v3/logger'); let errors = require('../../libs/api-v3/errors'); let CustomError = errors.CustomError; let InternalServerError = errors.InternalServerError; module.exports = function (err, req, res, next) { - // TODO add logging + // Log the original error with some metadata + let stack = err.stack || err.message || err; + logging.error(stack, { + originalUrl: req.originalUrl, + headers: req.headers, + body: req.body + }); // In case of a CustomError class, use it's data // Otherwise try to identify the type of error (mongoose validation, mongodb unique, ...)