UNPKG

@krainovsd/fastify-logger

Version:
1 lines 5.2 kB
{"version":3,"file":"transport.cjs","sources":["../../src/lib/index.ts","../../src/transport.ts"],"sourcesContent":["import { getByPath } from \"@krainovsd/js-helpers\";\nimport { trace } from \"@opentelemetry/api\";\nimport type { FastifyReply, FastifyRequest } from \"fastify\";\nimport { v4 } from \"uuid\";\nimport type { TransportFormat } from \"../logger-types\";\n\nexport function getTraceId() {\n return trace?.getActiveSpan?.()?.spanContext?.()?.traceId ?? undefined;\n}\n\nexport function getErrorInfo(err: unknown, stack: boolean = true) {\n const error = getByPath(err, \"message\") ?? undefined;\n const errorStatus = getByPath(err, \"status\") ?? undefined;\n const errorDescription = getByPath(err, \"description\") ?? undefined;\n const errorStack = stack ? (err instanceof Error ? err.stack : undefined) : undefined;\n\n const traceID = getTraceId();\n\n return { error, errorStatus, errorDescription, errorStack, traceID };\n}\n\nexport function getRequestInfo(req: FastifyRequest) {\n const host = req.ip;\n const url = req.url;\n const method = req.method;\n const traceID = req.traceId ?? getTraceId();\n const operationId = req.operationId ?? v4();\n\n return { host, url, method, traceID, operationId };\n}\n\nexport function getResponseInfo(res: FastifyReply) {\n const status = res?.statusCode ? String(res.statusCode) : null;\n\n return { status };\n}\n\nfunction isHasSpace(str: unknown): str is string {\n return typeof str === \"string\" && str.includes(\" \");\n}\n\nexport function getCorrectLog(\n obj: Record<string, unknown>,\n deniedProperties?: string[],\n format: TransportFormat = \"logfmt\",\n) {\n const correctObj = Object.fromEntries(\n Object.entries(obj).filter(\n ([key, value]) =>\n !(deniedProperties?.includes?.(key.toLowerCase()) || typeof value === \"undefined\"),\n ),\n );\n\n switch (format) {\n case \"logfmt\": {\n let log = \"\";\n\n Object.entries(correctObj).forEach(([key, value]) => {\n if (isHasSpace(value)) {\n value = `\"${value}\"`;\n }\n\n log += `${key}=${value} `;\n });\n // eslint-disable-next-line no-console\n console.log(log.trim());\n break;\n }\n case \"json\": {\n // eslint-disable-next-line no-console\n console.log(correctObj);\n break;\n }\n default: {\n break;\n }\n }\n}\n","import { isNumber, isObject, isString } from \"@krainovsd/js-helpers\";\nimport build from \"pino-abstract-transport\";\nimport { getCorrectLog } from \"./lib\";\nimport type { TransportSettings } from \"./logger-types\";\n\nexport default function transport(opts: TransportSettings = {}) {\n const deniedProperty = opts.deniedProperties?.map((property) => {\n return String(property).trim().toLowerCase();\n });\n\n return build(async function build(source) {\n for await (const obj of source) {\n if (!isObject(obj)) return;\n\n obj.time = new Date().toISOString();\n if (isString(obj.level) || isNumber(obj.level)) obj.level = getPinoLevel(obj.level);\n getCorrectLog(obj, deniedProperty, opts.format);\n }\n });\n}\n\nfunction getPinoLevel(level: number | string) {\n switch (String(level).toLowerCase()) {\n case \"30\": {\n return \"info\";\n }\n case \"40\": {\n return \"warn\";\n }\n case \"50\": {\n return \"error\";\n }\n default: {\n return \"debug\";\n }\n }\n}\n"],"names":["isObject","isString","isNumber"],"mappings":";;;;;;;AAqCA,SAAS,UAAU,CAAC,GAAY,EAAA;IAC9B,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;AACrD;AAEM,SAAU,aAAa,CAC3B,GAA4B,EAC5B,gBAA2B,EAC3B,SAA0B,QAAQ,EAAA;IAElC,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CACnC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CACxB,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KACX,EAAE,gBAAgB,EAAE,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,OAAO,KAAK,KAAK,WAAW,CAAC,CACrF,CACF;IAED,QAAQ,MAAM;QACZ,KAAK,QAAQ,EAAE;YACb,IAAI,GAAG,GAAG,EAAE;AAEZ,YAAA,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AAClD,gBAAA,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE;AACrB,oBAAA,KAAK,GAAG,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAG;;AAGtB,gBAAA,GAAG,IAAI,CAAG,EAAA,GAAG,CAAI,CAAA,EAAA,KAAK,GAAG;AAC3B,aAAC,CAAC;;YAEF,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACvB;;QAEF,KAAK,MAAM,EAAE;;AAEX,YAAA,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;YACvB;;;AAMN;;ACxEc,SAAU,SAAS,CAAC,OAA0B,EAAE,EAAA;IAC5D,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,QAAQ,KAAI;QAC7D,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;AAC9C,KAAC,CAAC;AAEF,IAAA,OAAO,KAAK,CAAC,eAAe,KAAK,CAAC,MAAM,EAAA;AACtC,QAAA,WAAW,MAAM,GAAG,IAAI,MAAM,EAAE;AAC9B,YAAA,IAAI,CAACA,kBAAQ,CAAC,GAAG,CAAC;gBAAE;YAEpB,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACnC,YAAA,IAAIC,kBAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAIC,kBAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,GAAG,CAAC,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC;YACnF,aAAa,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC;;AAEnD,KAAC,CAAC;AACJ;AAEA,SAAS,YAAY,CAAC,KAAsB,EAAA;IAC1C,QAAQ,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE;QACjC,KAAK,IAAI,EAAE;AACT,YAAA,OAAO,MAAM;;QAEf,KAAK,IAAI,EAAE;AACT,YAAA,OAAO,MAAM;;QAEf,KAAK,IAAI,EAAE;AACT,YAAA,OAAO,OAAO;;QAEhB,SAAS;AACP,YAAA,OAAO,OAAO;;;AAGpB;;;;"}