dg-npm-templates
Version:
Npx generator for react app dependency creation by digite
75 lines (65 loc) • 2.01 kB
JavaScript
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
};