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