UNPKG

@uoa/lambda-tracing

Version:

Library for logging & distributed tracing in UoA Lambda projects

73 lines (72 loc) 2.89 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const UoaB3Propagator_1 = require("./UoaB3Propagator"); const tracing_1 = require("./tracing"); const UoaLogger_1 = require("./UoaLogger"); const winston = require('winston'); const moment = require('moment'); const path = require('path'); const { trace, context } = require('@opentelemetry/api'); const defaultLogPattern = '%date [%thread] %level %class - [[[%traceId,%spanId,%info]]] %message'; const uoaLogLevels = { error: 0, warn: 1, audit: 2, info: 3, debug: 4 }; const uoaLoggingFormat = function (callingModule) { return winston.format.printf((logInfo) => { let logPattern = process.env.loggingPattern ? process.env.loggingPattern : defaultLogPattern; const logReplacements = getLogReplacementValues(callingModule, logInfo); logReplacements.forEach((value, key) => { logPattern = logPattern.replace(key, value); }); return logPattern; }); }; function getLogReplacementValues(callingModule, logInfo) { const parts = callingModule.filename.substring(0, callingModule.filename.lastIndexOf('.js')).split(path.sep); const moduleParts = parts.slice(parts.indexOf('src')); let traceId = '-'; let spanId = '-'; const currentContext = trace.getSpanContext(context.active()); if (currentContext) { traceId = currentContext.traceId; spanId = currentContext.spanId; } let info = '-'; const infoHeader = context.active().getValue(UoaB3Propagator_1.B3_INFO_KEY); if ((0, tracing_1.getTraceInfoHeader)()) { info = (0, tracing_1.getTraceInfoHeader)(); } else if (infoHeader) { info = infoHeader.toString(); } let message = '-'; if (logInfo.message != null) { message = logInfo.message; } const traceIdLength = context.active().getValue(UoaB3Propagator_1.B3_TRACE_ID_LENGTH_KEY); let logReplacements = new Map(); logReplacements.set('%date', moment().toISOString()); logReplacements.set('%thread', '-'); logReplacements.set('%level', logInfo.level.toUpperCase()); logReplacements.set('%class', moduleParts.join('.')); logReplacements.set('%traceId', traceId.slice(traceId.length - traceIdLength)); logReplacements.set('%spanId', spanId); logReplacements.set('%info', info); logReplacements.set('%message', message.replace(/\n/g, '')); return logReplacements; } module.exports = function (callingModule) { return new UoaLogger_1.UoaLogger({ levels: uoaLogLevels, transports: [ new winston.transports.Console({ level: process.env.loggingLevel ? process.env.loggingLevel.toLowerCase() : 'info' }) ], format: uoaLoggingFormat(callingModule) }); };