@krainovsd/fastify-logger
Version:
Krainov fastify logger
66 lines (62 loc) • 1.99 kB
JavaScript
import { isObject, isString, isNumber } from '@krainovsd/js-helpers';
import build from 'pino-abstract-transport';
import '@opentelemetry/api';
import 'uuid';
function isHasSpace(str) {
return typeof str === "string" && str.includes(" ");
}
function getCorrectLog(obj, deniedProperties, format = "logfmt") {
const correctObj = Object.fromEntries(Object.entries(obj).filter(([key, value]) => !(deniedProperties?.includes?.(key.toLowerCase()) || typeof value === "undefined")));
switch (format) {
case "logfmt": {
let log = "";
Object.entries(correctObj).forEach(([key, value]) => {
if (isHasSpace(value)) {
value = `"${value}"`;
}
log += `${key}=${value} `;
});
// eslint-disable-next-line no-console
console.log(log.trim());
break;
}
case "json": {
// eslint-disable-next-line no-console
console.log(correctObj);
break;
}
}
}
function transport(opts = {}) {
const deniedProperty = opts.deniedProperties?.map((property) => {
return String(property).trim().toLowerCase();
});
return build(async function build(source) {
for await (const obj of source) {
if (!isObject(obj))
return;
obj.time = new Date().toISOString();
if (isString(obj.level) || isNumber(obj.level))
obj.level = getPinoLevel(obj.level);
getCorrectLog(obj, deniedProperty, opts.format);
}
});
}
function getPinoLevel(level) {
switch (String(level).toLowerCase()) {
case "30": {
return "info";
}
case "40": {
return "warn";
}
case "50": {
return "error";
}
default: {
return "debug";
}
}
}
export { transport as default };
//# sourceMappingURL=transport.js.map