@hoangnam.io/qa-tools
Version:
Logging, Error handling, Notifying for Express codebase
81 lines (69 loc) • 2.25 kB
JavaScript
require("dotenv").config();
const express = require("express");
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
const cors = require("cors");
const { createLogMiddleware } = require("./logging/log-middleware");
const { getLogger } = require("./logging/logger");
const { getNotifier } = require("./notify");
const { getErrorHandlerMiddleware } = require("./error-handling");
app.use(cors());
const appName = "MyAppName";
// notifier
const notifier = getNotifier({
discord: {
url: "https://discord.com/api/webhooks/1392419926458892388/ZeE6S3qJuEScAUP98-jCCnR153pZaZ_PT7aUtsXgFTW8N63fqMDCauDHDJprLJ5vdK2r",
},
});
const logOptions = {
consoleConfig: { mode: "prod" },
mongoConfig: { connectionString: process.env.LOG_DB_CONNECTION_STRING },
gcConfig: {
projectId: "kicc-384807",
keyFilename: "/Users/hoangnam/_code/archive/qa-tools/service-account-key.json",
},
};
// logger
// must pass logObj: logger.log({status: 200})
// must not pass string: logger.log("hello")
const logger = getLogger(logOptions);
// logger.log({
// severity: "ERROR",
// appName: "QALibApp",
// logType: "RequestLog",
// zTimestamp: "2025-07-09T16:10:52+07:00",
// timestamp: 1752052252166,
// caller: {
// user: "user",
// },
// userAgent: "curl/8.7.1",
// ip: "::1",
// method: "GET",
// url: "/login",
// responseContentLength: 144,
// contentLengthUnit: "bytes",
// responseTime: 1.362,
// responseTimeUnit: "ms",
// status: 404,
// query: {},
// body: "*",
// });
logger.log("hello");
// log middleware
const createLogMiddlewareOptions = {
extractCallerFunc: () => ({ user: "user" }),
appName: appName,
sensitiveRoutes: ["login", "auth"],
ignoreRoutes: [{ method: "GET", route: "health-check" }],
loggerOptions: logOptions,
// fluentConfig: { host: "0.0.0.0" },
};
app.use(createLogMiddleware(app, createLogMiddlewareOptions));
app.use(require("./auth"));
app.use(require("./test"));
// error handler
const errorHandler = getErrorHandlerMiddleware(notifier, (req) => req.userInfo, appName);
app.use(errorHandler);
const PORT = process.env.PORT || 8000;
app.listen(PORT, () => console.log(`${appName} listening on port ${PORT}!`));