diff --git a/src/middleware/index.js b/src/middleware/index.js index 686411d..be23b23 100644 --- a/src/middleware/index.js +++ b/src/middleware/index.js @@ -15,19 +15,12 @@ const { TRUST_PROXY } = require("../constants/middlewareConstants"); -const { - loggingMiddleware, - morganInfo, - morganWarn, - morganError, - morganEvent, - morganAnalytics, - morganSecurity, -} = require("./logging"); +const { loggingMiddleware } = require("./logging"); const securedMiddleware = require("./secured"); const securedRoutes = require("../routes/secured"); const adaptiveBodyParser = require("./adaptiveBodyParser"); const analytics = require("../controllers/analyticsControllers"); +const structuredLogger = require("../utils/structuredLogger"); function setupApp() { const app = express(); @@ -39,15 +32,7 @@ app.use(hbs); // Setup logging - app.use( - morganInfo, - morganWarn, - morganError, - morganEvent, - morganAnalytics, - morganSecurity, - loggingMiddleware - ); + app.use(structuredLogger, loggingMiddleware); app.use(authCheck); diff --git a/src/middleware/logging.js b/src/middleware/logging.js index 7a36796..83222cf 100644 --- a/src/middleware/logging.js +++ b/src/middleware/logging.js @@ -1,12 +1,4 @@ const { winstonLogger } = require("../utils/logging"); -const structuredLogger = require("../utils/structuredLogger"); - -const morganInfo = structuredLogger("info"); -const morganWarn = structuredLogger("warn"); -const morganError = structuredLogger("error"); -const morganEvent = structuredLogger("event"); -const morganAnalytics = structuredLogger("analytics"); -const morganSecurity = structuredLogger("security"); // Middleware to inject logger into req const loggingMiddleware = (req, res, next) => { @@ -16,10 +8,4 @@ module.exports = { loggingMiddleware, - morganInfo, - morganWarn, - morganError, - morganEvent, - morganAnalytics, - morganSecurity, }; diff --git a/src/utils/structuredLogger.js b/src/utils/structuredLogger.js index 956d8ec..e7473a7 100644 --- a/src/utils/structuredLogger.js +++ b/src/utils/structuredLogger.js @@ -1,15 +1,19 @@ const { winstonLogger } = require("./logging"); +function determineLogLevel(statusCode) { + if (statusCode < 400) return "event"; + if (statusCode === 401 || statusCode === 403) return "security"; + if (statusCode >= 400 && statusCode < 500) return "warn"; + if (statusCode >= 500) return "error"; + return null; +} -module.exports = (level) => (req, res, next) => { +module.exports = (req, res, next) => { res.on("finish", () => { const { method, url, headers, query, body, ip, connection } = req; const { statusCode } = res; - if ( - (level === "info" && statusCode < 400) || - (level === "warn" && statusCode >= 400 && statusCode < 500) || - (level === "error" && statusCode >= 500) - ) { + let logLevel = determineLogLevel(statusCode); + if (logLevel) { // Flatten nested objects into key-value pairs for metadata const flatten = (obj, prefix = "") => { if (!obj || typeof obj !== "object") return {}; @@ -35,8 +39,7 @@ ...flatten(body, "body"), }; - winstonLogger.log({ - level, + winstonLogger[logLevel]({ message: `${method} ${url}`, ...meta, });