UNPKG

dg-npm-templates

Version:

Npx generator for react app dependency creation by digite

75 lines (65 loc) 2.01 kB
const { createLogger, format } = require("winston"); const LokiTransport = require("winston-loki"); const responseTime = require("response-time"); let logger; const setupLogger = app => { const lokiURL = process.env.LOKI_URL; if ( lokiURL ) { logger = createLogger({ transports: [ new LokiTransport({ host: lokiURL, labels: { origin: process.env.APP_NAME, application: process.env.APP_NAME }, json: true, format: format.json(), replaceTimestamp: true, basicAuth: process.env.LOKI_BASICAUTH }) ] }); app.use(responseTime(logResponseTime)); app.use(logError); console.log("Loki Logger is configured and logs will be pushed to", lokiURL); } else { console.log("Loki Logger is not configured"); } }; const logResponseTime = (req, res, time) => { logger.info({ message: { app: req.app_name || process.env.APP_NAME, method: req.method, host: req.headers.host, path: req.originalUrl, status: res.statusCode, duration: time + "ms", "x-fabric-correlation": req.headers["x-fabric-correlation"] || req.headers["X-FABRIC-CORRELATION"] || "" }, labels: { application: req.app_name || process.env.APP_NAME } }); }; const logError = (err, req, res, next) => { logger.error({ message: { app: req.app_name || process.env.APP_NAME, method: req.method, host: req.headers.host, path: req.originalUrl, status: res.statusCode, error: err.stack }, labels: { application: req.app_name } }); next(); }; module.exports = { setupLogger, logError };