const winston = require('winston'); const LokiTransport = require('winston-loki'); const context = require('./context'); const moment = require('moment-timezone'); module.exports = { create: (config) => { var transports = [ new winston.transports.Console({}) ] const lokiConfig = { host: config.prodHost, labels: { app: config.appTag }, json: true, format: winston.format.json(), onConnectionError: (err) => console.error(err) } if(config.prod) { transports.push(new LokiTransport(lokiConfig)); } const logger = winston.createLogger({ format: winston.format.combine( winston.format((info, opts) => { try { info.requestId = context.getRequestId(); info.metadata = context.getMetadata(); } catch(error) { //no context available, ignore attempt to attach requestId } info.time = moment(); return info; })(), winston.format.json() ), transports: transports }); return logger; } }