openapi-connect
Version:
Base for microservices around OpenAPI/Swagger
80 lines • 2.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.errorLogging = exports.requestLogging = exports.defaultOptions = void 0;
const expressWinston = require("express-winston");
const loggerism_1 = require("loggerism");
const requestWhitelist = ['url', 'headers', 'method', 'httpVersion', 'originalUrl', 'query', 'body'];
const headersBlacklist = ['authorization', 'cookie'];
const environment = (typeof process !== 'undefined' && process.env.NODE_ENV && process.env.NODE_ENV.trim()) || 'development';
const isDevelopment = environment === 'development';
exports.defaultOptions = {
meta: true,
colorize: isDevelopment,
requestWhitelist,
requestWhiteList: requestWhitelist,
headersBlacklist,
ignoreRoute: () => false,
exceptionToMeta: loggerism_1.dumpError
};
Object.freeze(exports.defaultOptions);
const requestFilter = (ops) => (req, propName) => {
switch (propName) {
case 'headers':
if (ops.headersBlacklist.some(x => !!req.headers[x])) {
const headers = { ...req.headers };
ops.headersBlacklist.forEach(x => {
delete headers[x];
});
return headers;
}
else {
return req.headers;
}
default:
return req[propName];
}
};
const wrapLogger = (logger) => {
return {
log: (...args) => {
if (args.length === 1) {
const { level, message, meta } = args[0];
logger[level](message, meta);
}
else {
logger[args[0]](args[1], args[2]);
}
}
};
};
function requestLogging(logger, options = exports.defaultOptions) {
return expressWinston.logger({
winstonInstance: wrapLogger(logger),
expressFormat: true,
level: levelFromStatus,
requestFilter: isDevelopment ? null : requestFilter(options),
...options,
requestWhitelist: options.requestWhitelist || options.requestWhiteList
});
}
exports.requestLogging = requestLogging;
function errorLogging(logger, options = exports.defaultOptions) {
return expressWinston.errorLogger({
winstonInstance: wrapLogger(logger),
level: levelFromStatus,
msg: '{{req.method}} {{req.url}} ',
requestFilter: isDevelopment ? null : requestFilter(options),
...options
});
}
exports.errorLogging = errorLogging;
const levelFromStatus = (req, res, error) => {
if (res.statusCode >= 500) {
return 'error';
}
if (res.statusCode >= 400) {
return 'warn';
}
return 'info';
};
//# sourceMappingURL=logging.js.map