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