From 9cdcf90c8a6d0c61a943184b0f15032ed2b0abb4 Mon Sep 17 00:00:00 2001 From: Michael Jackson Date: Tue, 15 Jan 2019 08:42:54 -0800 Subject: [PATCH] Add HTTP request logging --- functions/package-lock.json | 25 ++++++++++++++++++++++++ functions/package.json | 1 + modules/functions/serveAuth.js | 4 +++- modules/functions/serveMainPage.js | 2 ++ modules/functions/serveNpmPackageFile.js | 4 +++- modules/functions/servePublicKey.js | 4 +++- modules/functions/serveStats.js | 4 +++- modules/middleware/logging.js | 15 ++++++++++++++ 8 files changed, 55 insertions(+), 4 deletions(-) create mode 100644 modules/middleware/logging.js diff --git a/functions/package-lock.json b/functions/package-lock.json index feed175..e96e73b 100644 --- a/functions/package-lock.json +++ b/functions/package-lock.json @@ -827,6 +827,14 @@ } } }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "requires": { + "safe-buffer": "5.1.2" + } + }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -3348,6 +3356,18 @@ "integrity": "sha512-9DITV2YEMcw7XojdfvGl3gDD8J9QjZTJ7ZOUuSAkP+F3T6rDbzMJuPktxptsdHYEvZcmXrCD3LMOhdSAEq6zKA==", "optional": true }, + "morgan": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", + "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", + "requires": { + "basic-auth": "~2.0.0", + "debug": "2.6.9", + "depd": "~1.1.2", + "on-finished": "~2.3.0", + "on-headers": "~1.0.1" + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -3487,6 +3507,11 @@ "ee-first": "1.1.1" } }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", diff --git a/functions/package.json b/functions/package.json index f746936..9c81af5 100644 --- a/functions/package.json +++ b/functions/package.json @@ -29,6 +29,7 @@ "jsonwebtoken": "^8.4.0", "lru-cache": "^5.1.1", "mime": "^2.4.0", + "morgan": "^1.9.1", "ndjson": "^1.5.0", "pretty-bytes": "^5.1.0", "prop-types": "^15.6.2", diff --git a/modules/functions/serveAuth.js b/modules/functions/serveAuth.js index 35e54df..ef78cd0 100644 --- a/modules/functions/serveAuth.js +++ b/modules/functions/serveAuth.js @@ -1,11 +1,13 @@ -import express from 'express'; import cors from 'cors'; +import express from 'express'; +import logging from '../middleware/logging'; import userToken from '../middleware/userToken'; import showAuth from '../actions/showAuth'; const app = express.Router(); +app.use(logging); app.use(cors()); app.use(userToken); app.use(showAuth); diff --git a/modules/functions/serveMainPage.js b/modules/functions/serveMainPage.js index e1f2aaf..fc918a3 100644 --- a/modules/functions/serveMainPage.js +++ b/modules/functions/serveMainPage.js @@ -1,9 +1,11 @@ import express from 'express'; +import logging from '../middleware/logging'; import serveMainPage from '../actions/serveMainPage'; const app = express.Router(); +app.use(logging); app.use(serveMainPage); export default app; diff --git a/modules/functions/serveNpmPackageFile.js b/modules/functions/serveNpmPackageFile.js index 96fcf4c..286cee4 100644 --- a/modules/functions/serveNpmPackageFile.js +++ b/modules/functions/serveNpmPackageFile.js @@ -1,8 +1,9 @@ -import express from 'express'; import cors from 'cors'; +import express from 'express'; import fetchPackage from '../middleware/fetchPackage'; import findFile from '../middleware/findFile'; +import logging from '../middleware/logging'; import redirectLegacyURLs from '../middleware/redirectLegacyURLs'; import validatePackageURL from '../middleware/validatePackageURL'; import validatePackageName from '../middleware/validatePackageName'; @@ -11,6 +12,7 @@ import serveFile from '../actions/serveFile'; const app = express.Router(); +app.use(logging); app.use(cors()); app.use(redirectLegacyURLs); app.use(validatePackageURL); diff --git a/modules/functions/servePublicKey.js b/modules/functions/servePublicKey.js index 5deff2a..94b0d5e 100644 --- a/modules/functions/servePublicKey.js +++ b/modules/functions/servePublicKey.js @@ -1,10 +1,12 @@ -import express from 'express'; import cors from 'cors'; +import express from 'express'; +import logging from '../middleware/logging'; import showPublicKey from '../actions/showPublicKey'; const app = express.Router(); +app.use(logging); app.use(cors()); app.use(showPublicKey); diff --git a/modules/functions/serveStats.js b/modules/functions/serveStats.js index 5ce621e..5484c3b 100644 --- a/modules/functions/serveStats.js +++ b/modules/functions/serveStats.js @@ -1,10 +1,12 @@ -import express from 'express'; import cors from 'cors'; +import express from 'express'; +import logging from '../middleware/logging'; import showStats from '../actions/showStats'; const app = express.Router(); +app.use(logging); app.use(cors()); app.use(showStats); diff --git a/modules/middleware/logging.js b/modules/middleware/logging.js new file mode 100644 index 0000000..84d726a --- /dev/null +++ b/modules/middleware/logging.js @@ -0,0 +1,15 @@ +import morgan from 'morgan'; + +const logging = morgan( + process.env.NODE_ENV === 'development' + ? 'dev' + : ':date[clf] - :method :url :status :res[content-length] - :response-time ms', + { + skip: + process.env.NODE_ENV === 'production' + ? (req, res) => res.statusCode < 400 // Log only errors in production + : () => process.env.NODE_ENV === 'test' // Skip logging in test env + } +); + +export default logging;