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) 1.91 kB
import M from"express";import j from"cors";import{AsyncLocalStorage as D}from"async_hooks";var O=new D;var R="x-trace-id";var s=class s{static getTraceIdField(){return s.traceIdField}static setTraceIdField(e){s.traceIdField=e}static getTraceId(){return O.getStore()?.traceId??null}};s.traceIdField=R;var v=s;import F from"fs";import U from"readline";async function _(I){let{logFilePath:e,page:x,limit:o,logRegex:r,level:n,traceId:i,appName:c,message:g,execution:l,searchPayload:p}=I;if(!F.existsSync(e))throw new Error("File not found");let y=F.createReadStream(e,"utf-8"),m=U.createInterface({input:y,crlfDelay:1/0}),a=[],t=0,d=(x-1)*o,G=d+o;for await(let E of m){let f=E.match(r);if(!f)continue;let[,b,w,T,u,h,L,N]=f,C=w?w.toLowerCase():"unknown",A=L&&L!=="N/A"?JSON.parse(L):"",P=N&&N!=="N/A"?N:"";n&&C!==n.toLowerCase()||i&&u!==i||c&&T?.toLowerCase()!==c.toLowerCase()||g&&!h?.toLowerCase().includes(g.toLowerCase())||l&&P!==l||p&&L!=="N/A"&&!JSON.stringify(A).toLowerCase().includes(p.toLowerCase())||(t>=d&&t<G&&a.push({id:u&&u.length>0?u:"N/A",timestamp:b,level:C,appName:T,message:h,payload:A,execution:P}),t++)}return{total:t,data:a.sort((E,f)=>new Date(f.timestamp).getTime()-new Date(E.timestamp).getTime())}}var S=M(),$=1338,X=/^\[(.*?)\] \[(.*?)\] \[(.*?)\] \[(.*?)\] \[(.*?)\] \[(.*?)\] \[(.*?)\]$/,ce=({logFilePath:I,corsOptions:e})=>{S.use(j(e)),S.get("/api/logs",async(x,o)=>{try{let{page:r="1",limit:n="10",level:i,traceId:c,appName:g,message:l,execution:p,searchPayload:y}=x.query,m=parseInt(r,10),a=parseInt(n,10),{total:t,data:d}=await _({logFilePath:I,logRegex:X,page:m,limit:a,level:i,traceId:c,appName:g,message:l,execution:p,searchPayload:y});o.json({total:t,page:m,limit:a,data:d})}catch(r){console.error("Error fetching logs:",r),o.status(500).json({error:"Failed to fetch logs"})}}),S.listen($,()=>{console.log(`Server running at http://localhost:${$}`)})};export{ce as startServer};