UNPKG

nodejs-logitron

Version:

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

2 lines (1 loc) 6.48 kB
"use strict";var ne=Object.create;var w=Object.defineProperty;var se=Object.getOwnPropertyDescriptor;var ae=Object.getOwnPropertyNames;var ge=Object.getPrototypeOf,me=Object.prototype.hasOwnProperty;var pe=(o,e)=>{for(var t in e)w(o,t,{get:e[t],enumerable:!0})},J=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of ae(e))!me.call(o,i)&&i!==t&&w(o,i,{get:()=>e[i],enumerable:!(r=se(e,i))||r.enumerable});return o};var x=(o,e,t)=>(t=o!=null?ne(ge(o)):{},J(e||!o||!o.__esModule?w(t,"default",{value:o,enumerable:!0}):t,o)),ce=o=>J(w({},"__esModule",{value:!0}),o);var Le={};pe(Le,{EXECUTION_LOG_CALLER:()=>B,EXECUTION_LOG_START_TIME:()=>z,LoggerService:()=>A,LoggerType:()=>b,TraceIdHandler:()=>g,createLogger:()=>f.createLogger,format:()=>f.format,parseLogFile:()=>P,startServer:()=>re,traceMiddleware:()=>de,transports:()=>f.transports,withTraceId:()=>W});module.exports=ce(Le);var f=require("winston");var b=(t=>(t.WINSTON="winston",t.PINO="pino",t))(b||{});var K=require("uuid");var k=require("async_hooks"),y=new k.AsyncLocalStorage;function W(o,e){y.run({traceId:o},e)}function le(o,e,t,r,...i){let s=new Date().toISOString(),a=y.getStore()?.traceId??"N/A",m=i.find(p=>p&&typeof p=="object")??null,c=r?.name&&typeof r?.time=="number"?`${r.name} ${r.time} ms`:"N/A";return`[${s}] [${o.toUpperCase()}] [${e.toUpperCase()}] [${a}] [${t}] [${m?JSON.stringify(m):"N/A"}] [${c}]`}var n=le;var q="x-trace-id",d="nodejs-logitron",z="EXECUTION_LOG_START_TIME";var B="EXECUTION_LOG_CALLER";var L=class L{static getTraceIdField(){return L.traceIdField}static setTraceIdField(e){L.traceIdField=e}static getTraceId(){return y.getStore()?.traceId??null}};L.traceIdField=q;var g=L;var _=x(require("fs")),H=x(require("readline"));async function P(o){let{logFilePath:e,page:t,limit:r,logRegex:i,level:s,traceId:a,appName:m,message:c,execution:p,searchPayload:I}=o;if(!_.default.existsSync(e))throw new Error("File not found");let M=_.default.createReadStream(e,"utf-8"),T=H.default.createInterface({input:M,crlfDelay:1/0}),h=[],l=0,E=(t-1)*r,oe=E+r;for await(let R of T){let v=R.match(i);if(!v)continue;let[,ie,D,G,N,U,O,F]=v,X=D?D.toLowerCase():"unknown",j=O&&O!=="N/A"?JSON.parse(O):"",Y=F&&F!=="N/A"?F:"";s&&X!==s.toLowerCase()||a&&N!==a||m&&G?.toLowerCase()!==m.toLowerCase()||c&&!U?.toLowerCase().includes(c.toLowerCase())||p&&Y!==p||I&&O!=="N/A"&&!JSON.stringify(j).toLowerCase().includes(I.toLowerCase())||(l>=E&&l<oe&&h.push({id:N&&N.length>0?N:"N/A",timestamp:ie,level:X,appName:G,message:U,payload:j,execution:Y}),l++)}return{total:l,data:h.sort((R,v)=>new Date(v.timestamp).getTime()-new Date(R.timestamp).getTime())}}function de(o,e,t){let r=o?.headers?.[g.getTraceIdField()]??o?.body?.[g.getTraceIdField()]??o?.query?.[g.getTraceIdField()]??(0,K.v4)();W(r,()=>t())}var Q=x(require("pino"));var S=class{constructor(e){this.appName=d;this.logger=(0,Q.default)({transport:{target:"pino-pretty",options:{ignore:"level"}},base:null,timestamp:!1,...e}),this.appName=e?.appName??d}infoWithExecutionTime(e,t,...r){this.logWithExecutionTime("info",e,t,...r)}warnWithExecutionTime(e,t,...r){this.logWithExecutionTime("warn",e,t,...r)}errorWithExecutionTime(e,t,...r){this.logWithExecutionTime("error",e,t,...r)}debugWithExecutionTime(e,t,...r){this.logWithExecutionTime("debug",e,t,...r)}info(e,...t){let r=n("info",this.appName,e,void 0,...t);this.logger.info(r)}warn(e,...t){let r=n("warn",this.appName,e,void 0,...t);this.logger.warn(r)}error(e,...t){let r=n("error",this.appName,e,void 0,...t);this.logger.error(r)}debug(e,...t){let r=n("debug",this.appName,e,void 0,...t);this.logger.debug(r)}logWithExecutionTime(e,t,r,...i){let s=(performance.now()-r.start).toFixed(2),a=n(e,this.appName,t,{name:r?.name,time:Number(s)},...i);this.logger[e](a)}};var u=require("winston");var{combine:ue,timestamp:fe,printf:he,colorize:xe}=u.format,C=class{constructor(e){this.appName=d;this.logger=(0,u.createLogger)({transports:[new u.transports.Console],format:ue(xe({all:!0}),fe({format:"YYYY-MM-DDThh:mm:ss"}),he(t=>`[${t.timestamp}] ${t.level}: ${t.message}`)),...e}),this.appName=e?.appName??d}infoWithExecutionTime(e,t,...r){this.logWithExecutionTime("info",e,t,...r)}warnWithExecutionTime(e,t,...r){this.logWithExecutionTime("warn",e,t,...r)}errorWithExecutionTime(e,t,...r){this.logWithExecutionTime("error",e,t,...r)}debugWithExecutionTime(e,t,...r){this.logWithExecutionTime("debug",e,t,...r)}info(e,...t){let r=n("info",this.appName,e,void 0,...t);this.logger.info(r)}warn(e,...t){let r=n("warn",this.appName,e,void 0,...t);this.logger.warn(r)}error(e,...t){let r=n("error",this.appName,e,void 0,...t);this.logger.error(r)}debug(e,...t){let r=n("debug",this.appName,e,void 0,...t);this.logger.debug(r)}logWithExecutionTime(e,t,r,...i){let s=(performance.now()-r.start).toFixed(2),a=n(e,this.appName,t,{name:r?.name,time:Number(s)},...i);this.logger[e](a)}};function V({type:o,options:e}){switch(o){case"pino":return new S(e);case"winston":return new C(e);default:throw new Error("Invalid logger type")}}var A=class{constructor(e={type:"pino"}){this.logger=V(e)}info(e,...t){this.logger.info(e,...t)}warn(e,...t){this.logger.warn(e,...t)}error(e,...t){this.logger.error(e,...t)}debug(e,...t){this.logger.debug(e,...t)}infoWithExecutionTime(e,t,...r){this.logger.infoWithExecutionTime(e,t,...r)}warnWithExecutionTime(e,t,...r){this.logger.warnWithExecutionTime(e,t,...r)}errorWithExecutionTime(e,t,...r){this.logger.errorWithExecutionTime(e,t,...r)}debugWithExecutionTime(e,t,...r){this.logger.debugWithExecutionTime(e,t,...r)}};var ee=x(require("express")),te=x(require("cors"));var $=(0,ee.default)(),Z=1338,ye=/^\[(.*?)\] \[(.*?)\] \[(.*?)\] \[(.*?)\] \[(.*?)\] \[(.*?)\] \[(.*?)\]$/,re=({logFilePath:o,corsOptions:e})=>{$.use((0,te.default)(e)),$.get("/api/logs",async(t,r)=>{try{let{page:i="1",limit:s="10",level:a,traceId:m,appName:c,message:p,execution:I,searchPayload:M}=t.query,T=parseInt(i,10),h=parseInt(s,10),{total:l,data:E}=await P({logFilePath:o,logRegex:ye,page:T,limit:h,level:a,traceId:m,appName:c,message:p,execution:I,searchPayload:M});r.json({total:l,page:T,limit:h,data:E})}catch(i){console.error("Error fetching logs:",i),r.status(500).json({error:"Failed to fetch logs"})}}),$.listen(Z,()=>{console.log(`Server running at http://localhost:${Z}`)})};0&&(module.exports={EXECUTION_LOG_CALLER,EXECUTION_LOG_START_TIME,LoggerService,LoggerType,TraceIdHandler,createLogger,format,parseLogFile,startServer,traceMiddleware,transports,withTraceId});