@stacksjs/logging
Version:
The Stacks logging system.
6 lines (5 loc) • 3.19 kB
JavaScript
// @bun
var Z=import.meta.require;import{AsyncLocalStorage as $}from"async_hooks";import K from"process";import{Logger as Y}from"@stacksjs/clarity";import{handleError as A}from"@stacksjs/error-handling";import{ExitCode as W}from"@stacksjs/types";var U=null,T=null,X=new $;function v(z,B){return X.run(z,B)}function w(){return X.getStore()}async function F(){if(U)return;if(T)return T;return T=(async()=>{let z=K.env.LOG_FORMAT||(K.env.NODE_ENV==="production"?"json":"text");try{let B=await import("@stacksjs/path");U=new Y("stacks",{level:K.env.LOG_LEVEL||"info",logDirectory:B.projectPath("storage/logs"),showTags:!1,fancy:z!=="json",format:z,writeToFile:!0})}catch{U=new Y("stacks",{level:K.env.LOG_LEVEL||"info",logDirectory:"storage/logs",showTags:!1,fancy:z!=="json",format:z,writeToFile:!0})}})(),T}async function J(){return await F(),U}function N(...z){let B=z.map((G)=>typeof G==="object"?JSON.stringify(G,null,2):String(G)).join(" "),D=X.getStore();if(D?.requestId)return`[${D.requestId}] ${B}`;return B}var V={info:async(...z)=>{let B=N(...z);await(await J()).info(B)},success:async(z)=>{await(await J()).success(z)},warn:async(z,B)=>{await(await J()).warn(z,B)},warning:async(z)=>{await(await J()).warn(z)},error:async(z,B)=>{let D=!!B&&typeof B==="object"&&!(B instanceof Error)&&(("shouldExit"in B)||("silent"in B)||("message"in B)),G;if(typeof z==="string")G=z;else if(z instanceof Error)G=z.stack||z.message;else G=JSON.stringify(z);let H="";if(B!==void 0&&!D)if(B instanceof Error)H=B.stack||B.message;else if(typeof B==="string")H=B;else try{H=JSON.stringify(B)}catch{H=String(B)}let Q=H?`${G} ${H}`:G;if(await(await J()).error(Q),D&&B.shouldExit)A(z,B)},debug:async(...z)=>{let B=N(...z);await(await J()).debug(B)},dump:async(...z)=>{let B=N(...z);await(await J()).debug(`DUMP: ${B}`)},dd:async(...z)=>{let B=N(...z);await(await J()).error(B),K.exit(W.FatalError)},echo:async(...z)=>{let B=N(...z);await(await J()).info(`ECHO: ${B}`)},time:(z)=>{let B=performance.now();return async(D)=>{let G=performance.now()-B,H=await J(),Q=D?` ${JSON.stringify(D)}`:"";await H.info(`${z}: ${G.toFixed(2)}ms${Q}`)}},syncWarn:(z)=>{K.stderr.write(`${z}
`)},syncError:(z)=>{K.stderr.write(`${z}
`)},fatal:(z,B=W.FatalError)=>{K.stderr.write(`${z}
`),K.exit(B)},flush:async()=>{if(!U&&!T)return;try{let z=await J(),B=z.flush;if(typeof B==="function")await B.call(z)}catch{}}};async function C(...z){for(let B of z)await V.debug(B)}async function y(...z){let B=N(...z);console.log(B),K.exit(W.FatalError)}async function k(...z){await V.debug(...z)}function R(z,B,D){let G=w(),H={event:B,traceId:G?.requestId,...D};if(z==="warn")V.warn(`[${B}]`,H);else V[z](H)}var O={request(z,B,D,G,H={}){let Q=D>=500?"error":D>=400?"warn":"info";R(Q,"http.request",{method:z,path:B,status:D,durationMs:G,...H})},query(z,B,D={}){R("debug","db.query",{sql:z,durationMs:B,...D})},slowQuery(z,B,D={}){R("warn","db.slow_query",{sql:z,durationMs:B,...D})},job(z,B,D={}){R(B==="failed"?"error":"info",`job.${B}`,{jobName:z,...D})},cache(z,B,D={}){R("debug",`cache.${z}`,{key:B,...D})}};V.struct=O;export{v as withLogContext,O as struct,J as logger,V as log,w as getLogContext,k as echo,C as dump,y as dd};