UNPKG

nodejs-logsage

Version:

Powerful logger module for NestJS, seamlessly integrating Pino and Winston for flexible logging with easy configuration.

2 lines (1 loc) 3.66 kB
"use strict";var G=Object.create;var u=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var W=Object.getOwnPropertyNames;var F=Object.getPrototypeOf,$=Object.prototype.hasOwnProperty;var K=(o,e)=>{for(var t in e)u(o,t,{get:e[t],enumerable:!0})},w=(o,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of W(e))!$.call(o,r)&&r!==t&&u(o,r,{get:()=>e[r],enumerable:!(i=S(e,r))||i.enumerable});return o};var q=(o,e,t)=>(t=o!=null?G(F(o)):{},w(e||!o||!o.__esModule?u(t,"default",{value:o,enumerable:!0}):t,o)),U=o=>w(u({},"__esModule",{value:!0}),o);var z={};K(z,{RequestMiddleware:()=>N});module.exports=U(z);var b="x-trace-id",T="logsage",L="EXECUTION_LOG_START_TIME",O="LOGGER_OPTIONS",R="EXECUTION_LOG_CALLER";var c=class c{static getTraceIdField(){return c.traceId}static setTraceId(e){c.traceId=e}};c.traceId=b;var a=c;function X(...o){let e=a.getTraceIdField(),t=null,i=[],r=null,g=null;for(let s of o.filter(M=>M))s&&typeof s=="object"&&(e in s&&(t=s[e]),L in s&&(r=new Date().getTime()-(typeof s[L]=="number"?s[L]:0)),R in s&&(g=s[R])),Object?.keys(s)?.length&&i.push(s);let m=i.filter(s=>s).map(s=>typeof s=="object"?JSON.stringify(s):s).join(" ");return r!==null&&(m=`[${g?g+": ":""}${r} ms]:${m}`),t&&(m=`[${t}]:${m}`),m}var n=X;var C=q(require("pino")),_=require("date-fns");var y=class{constructor(e){this.logger=(0,C.default)({transport:{target:"pino-pretty"},base:{pid:!1},timestamp:()=>`,"time":"${(0,_.format)(new Date,"yyyy-MM-dd'T'HH:mm:ss")}"`,...e})}info(...e){let t=n(...e);this.logger.info(t)}warn(...e){let t=n(...e);this.logger.warn(t)}error(...e){let t=n(...e);this.logger.error(t)}debug(...e){let t=n(...e);this.logger.debug(t)}};var p=require("winston");var{combine:j,timestamp:Y,printf:H,colorize:B}=p.format,h=class{constructor(e){this.logger=(0,p.createLogger)({transports:[new p.transports.Console],format:j(B({all:!0}),Y({format:"YYYY-MM-DDThh:mm:ss"}),H(t=>`[${t.timestamp}] ${t.level}: ${t.message}`)),...e})}info(...e){let t=n(...e);this.logger.info(t)}warn(...e){let t=n(...e);this.logger.warn(t)}error(...e){let t=n(...e);this.logger.error(t)}debug(...e){let t=n(...e);this.logger.debug(t)}};function P({type:o,options:e}){switch(o){case"pino":return new y(e);case"winston":return new h(e);default:throw new Error("Invalid logger type")}}var A=require("uuid"),l=require("cls-hooked");var f=class f{use(e,t,i){let r=a.getTraceIdField(),g=e?.headers?.[r]??e?.body?.[r]??e?.query?.[r]??(0,A.v4)();f.clsNamespace.run(()=>{e.headers[r]=g;let d=e.headers[r];f.clsNamespace.set(r,d),i()})}static getTraceId(){let e=a.getTraceIdField(),t=(0,l.getNamespace)(T);return t?t.get(e):""}};f.clsNamespace=(0,l.getNamespace)(T)??(0,l.createNamespace)(T);var I=f;var x=class{constructor(){this.db=new Map}get(e){return this.db.get(e)}set(e,t,i=0){this.db.set(e,t),i!==0&&setTimeout(()=>{this.del(e)},i*1e3)}del(e){this.db.delete(e)}},k=new x,v=k;var E=class{constructor(e={type:"pino"}){this.logger=P(e),v.set(O,e)}info(...e){this.logWithRequestId("info",...e)}warn(...e){this.logWithRequestId("warn",...e)}error(...e){this.logWithRequestId("error",...e)}debug(...e){this.logWithRequestId("debug",...e)}addRequestId(...e){let t=a.getTraceIdField(),i=I.getTraceId();return i?e.concat({[t]:i}):e}logWithRequestId(e,...t){let i=this.addRequestId(...t);this.logger[e](...i)}};var N=class{use(e,t,i){let r=()=>{let d=v.get(O);return new E(d??{type:"pino"})},g=performance.now();t.on("finish",()=>{let m=(performance.now()-g).toFixed(3);r().info({method:e?.method,url:e?.url,headers:e?.headers,query:e?.query,body:e?.body,responseTime:`${m} ms`,statusCode:t?.statusCode})}),i()}};0&&(module.exports={RequestMiddleware});