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