UNPKG

nodejs-logsage

Version:

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

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