@uoa/lambda-tracing
Version:
Library for logging & distributed tracing in UoA Lambda projects
73 lines (72 loc) • 2.89 kB
JavaScript
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)
});
};
;