@stacksjs/logging 0.70.342 → 0.70.345
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +16 -1
- package/dist/index.js +4 -4
- package/package.json +7 -7
package/dist/index.d.ts
CHANGED
|
@@ -33,7 +33,22 @@ export declare function normalizeContext(ctx: LogContext): LogContext;
|
|
|
33
33
|
*/
|
|
34
34
|
export declare function withLogContext<T>(context: LogContext, fn: () => T): T;
|
|
35
35
|
/**
|
|
36
|
-
* Get the current log context (if any).
|
|
36
|
+
* Get the current log context (if any), with the active trace id folded in.
|
|
37
|
+
*
|
|
38
|
+
* The trace is read from the router's own AsyncLocalStorage through the
|
|
39
|
+
* process-global symbol it publishes, rather than by importing
|
|
40
|
+
* `@stacksjs/router` - which would be a cycle, since the router imports this.
|
|
41
|
+
* That symbol is already a deliberate cross-copy contract (see
|
|
42
|
+
* `request-context.ts`), so reading it here is using the seam rather than
|
|
43
|
+
* reaching around one.
|
|
44
|
+
*
|
|
45
|
+
* Why it belongs here at all: a log line without a request id is a log line
|
|
46
|
+
* nobody can join to anything. The id follows a request into its jobs now, and
|
|
47
|
+
* the only place that becomes *useful* is the log.
|
|
48
|
+
*
|
|
49
|
+
* An explicit context wins, so a caller who sets `trace_id` deliberately - a
|
|
50
|
+
* migration script correlating to a deploy, say - is not overwritten by an
|
|
51
|
+
* ambient one.
|
|
37
52
|
*/
|
|
38
53
|
export declare function getLogContext(): LogContext | undefined;
|
|
39
54
|
declare function getLogger(): Promise<Logger>;
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var N=import.meta.require;import{AsyncLocalStorage as w}from"async_hooks";import X from"process";import{Logger as k}from"@stacksjs/clarity";import{handleError as C}from"@stacksjs/error-handling";import{ExitCode as D}from"@stacksjs/types";var W=null,
|
|
2
|
+
var N=import.meta.require;import{AsyncLocalStorage as w}from"async_hooks";import X from"process";import{Logger as k}from"@stacksjs/clarity";import{handleError as C}from"@stacksjs/error-handling";import{ExitCode as D}from"@stacksjs/types";var W=null,T=null,j=new Set;function V(B){return j.add(B),B.finally(()=>j.delete(B)).catch(()=>{}),B}var O=!1;function E(){if(O)return;O=!0,X.on("beforeExit",()=>{G.flush()})}var M=new Set(["debug","info","success","warning","error"]);function b(B,H="info"){if(!B)return H;let J=B.toLowerCase();if(J==="warn")return"warning";if(M.has(J))return J;return X.stderr.write(`[logging] Ignoring invalid LOG_LEVEL="${B}" (expected: ${[...M].join(", ")}); using "${H}".
|
|
3
3
|
`),H}function h(B){if(B==="json"||B==="text")return B;if(B)X.stderr.write(`[logging] Ignoring invalid LOG_FORMAT="${B}" (expected "json" or "text").
|
|
4
|
-
`);return X.env.NODE_ENV==="production"?"json":"text"}function L(B){let H=B.envLevel?b(B.envLevel):B.cfgLevel?b(B.cfgLevel):"info",J=B.envFormat?h(B.envFormat):B.cfgFormat==="json"||B.cfgFormat==="text"?B.cfgFormat:B.isProduction?"json":"text";return{level:H,format:J,writeToFile:B.cfgWriteToFile??!0}}function q(B,H=0){if(H>8)return{name:"Error",message:"[cause chain truncated]"};if(B instanceof Error)return{name:B.name,message:B.message,stack:B.stack,cause:B.cause!=null?q(B.cause,H+1):void 0};if(typeof B==="string")return{name:"Error",message:B};if(B==null)return{name:"Error",message:String(B)};try{return{name:"Error",message:JSON.stringify(A(B))}}catch{return{name:"Error",message:String(B)}}}function
|
|
5
|
-
caused by: ${J.stack||`${J.name}: ${J.message}`}`,J=J.cause;return H}function A(B,H=0){if(B instanceof Error)return q(B);if(H>=4||B===null||typeof B!=="object")return B;if(Array.isArray(B))return B.map((U)=>A(U,H+1));let J=Object.getPrototypeOf(B);if(J!==Object.prototype&&J!==null)return B;let Q={};for(let[U,Z]of Object.entries(B))Q[U]=A(Z,H+1);return Q}function _(B){return A(B)}var
|
|
4
|
+
`);return X.env.NODE_ENV==="production"?"json":"text"}function L(B){let H=B.envLevel?b(B.envLevel):B.cfgLevel?b(B.cfgLevel):"info",J=B.envFormat?h(B.envFormat):B.cfgFormat==="json"||B.cfgFormat==="text"?B.cfgFormat:B.isProduction?"json":"text";return{level:H,format:J,writeToFile:B.cfgWriteToFile??!0}}function q(B,H=0){if(H>8)return{name:"Error",message:"[cause chain truncated]"};if(B instanceof Error)return{name:B.name,message:B.message,stack:B.stack,cause:B.cause!=null?q(B.cause,H+1):void 0};if(typeof B==="string")return{name:"Error",message:B};if(B==null)return{name:"Error",message:String(B)};try{return{name:"Error",message:JSON.stringify(A(B))}}catch{return{name:"Error",message:String(B)}}}function S(B){let H=B.stack||`${B.name}: ${B.message}`,J=B.cause;while(J)H+=`
|
|
5
|
+
caused by: ${J.stack||`${J.name}: ${J.message}`}`,J=J.cause;return H}function A(B,H=0){if(B instanceof Error)return q(B);if(H>=4||B===null||typeof B!=="object")return B;if(Array.isArray(B))return B.map((U)=>A(U,H+1));let J=Object.getPrototypeOf(B);if(J!==Object.prototype&&J!==null)return B;let Q={};for(let[U,Z]of Object.entries(B))Q[U]=A(Z,H+1);return Q}function _(B){return A(B)}var F=new w;function s(B,H){return F.run(B,H)}function y(){let B=F.getStore(),H=x();if(!H)return B;return{trace_id:H,...B}}function x(){try{let H=globalThis[Symbol.for("stacks.router.traceStorage")]?.getStore?.();if(H)return H;return globalThis[Symbol.for("stacks.router.requestStorage")]?.getStore?.()?._requestId}catch{return}}async function f(){if(W)return;if(T)return T;return E(),T=(async()=>{let B,H,J,Q;try{let K=(await import("@stacksjs/config")).logging;if(K){if(B=K.level,H=K.format,typeof K.writeToFile==="boolean")Q=K.writeToFile;if(K.logsPath)J=(await import("path")).dirname(K.logsPath)}}catch{}let{level:U,format:Z,writeToFile:I}=L({envLevel:X.env.LOG_LEVEL,envFormat:X.env.LOG_FORMAT,cfgLevel:B,cfgFormat:H,cfgWriteToFile:Q,isProduction:X.env.NODE_ENV==="production"}),P=J;if(!P)try{P=(await import("@stacksjs/path")).projectPath("storage/logs")}catch{P="storage/logs"}W=new k("stacks",{level:U,logDirectory:P,showTags:!1,fancy:Z!=="json",format:Z,writeToFile:I})})(),T}async function $(){return await f(),W}function Y(...B){let H=B.filter((Q)=>Q!==void 0).map((Q)=>{if(Q instanceof Error)return S(q(Q));if(typeof Q==="object"&&Q!==null)return JSON.stringify(A(Q),null,2);return String(Q)}).join(" "),J=F.getStore();if(J?.requestId)return`[${J.requestId}] ${H}`;return H}var v=new Set(["shouldExit","silent","message"]);function d(B){if(!B||typeof B!=="object"||B instanceof Error)return!1;if(!(("shouldExit"in B)||("silent"in B)))return!1;return Object.keys(B).every((H)=>v.has(H))}var G={info:async(...B)=>{let H=Y(...B);await(await $()).info(H)},success:async(B)=>{await(await $()).success(B)},warn:async(B,H)=>{let J=await $();if(H==null){await J.warn(B);return}let Q=A(H);await J.warn(B,Q)},warning:async(B)=>{await(await $()).warn(B)},error:async(B,H,J)=>{let Q=d(H)?H:void 0,U;if(typeof B==="string")U=B;else U=S(q(B));if(H!==void 0&&!Q)U=`${U} ${S(q(H))}`;let Z={...y(),...J};if(Object.keys(Z).length>0)try{U=`${U} ${JSON.stringify(_(Z))}`}catch{}if(await(await $()).error(U),Q?.shouldExit)C(B,Q)},debug:async(...B)=>{let H=(X.env.LOG_LEVEL||"info").toLowerCase();if(H==="info"||H==="warn"||H==="error")return;let J=Y(...B);await(await $()).debug(J)},dump:async(...B)=>{let H=Y(...B);await(await $()).debug(`DUMP: ${H}`)},dd:async(...B)=>{let H=Y(...B);await(await $()).error(H),X.exit(D.FatalError)},echo:async(...B)=>{let H=Y(...B);await(await $()).info(`ECHO: ${H}`)},time:(B)=>{let H=performance.now();return async(J)=>{let Q=performance.now()-H,U=await $(),Z=J?` ${JSON.stringify(_(J))}`:"";await U.info(`${B}: ${Q.toFixed(2)}ms${Z}`)}},syncWarn:(B)=>{X.stderr.write(`${B}
|
|
6
6
|
`)},syncError:(B)=>{X.stderr.write(`${B}
|
|
7
7
|
`)},fatal:(B,H=D.FatalError)=>{X.stderr.write(`${B}
|
|
8
|
-
`),X.exit(H)},flush:async()=>{if(j.size>0)await Promise.allSettled([...j]);if(!W&&!
|
|
8
|
+
`),X.exit(H)},flush:async()=>{if(j.size>0)await Promise.allSettled([...j]);if(!W&&!T)return;try{let B=await $(),H=B.flush;if(typeof H==="function")await H.call(B)}catch{}}};async function a(...B){for(let H of B)await G.debug(H)}async function t(...B){let H=Y(...B);console.log(H),X.exit(D.FatalError)}async function r(...B){await G.debug(...B)}function c(B){if(B&&typeof B==="object"){let H=B;if(typeof H.status==="number")return H.status;if(typeof H.statusCode==="number")return H.statusCode}return}function e(B,H={}){let J=H.status??c(B),Q=typeof J==="number"&&J>=400&&J<500,U=H.label??"Unhandled error",Z={...H.context,...J!=null?{status:J}:{}};if(Q){G.debug(`${U} (client error ${J}): ${q(B).message}`);return}G.error(U,B,Z)}function R(B,H,J){let Q=y(),U={event:H,traceId:Q?.requestId,...J};if(B==="warn")V(G.warn(`[${H}]`,U));else V(G[B](U))}var m={request(B,H,J,Q,U={}){let Z=J>=500?"error":J>=400?"warn":"info";R(Z,"http.request",{method:B,path:H,status:J,durationMs:Q,...U})},query(B,H,J={}){R("debug","db.query",{sql:B,durationMs:H,...J})},slowQuery(B,H,J={}){R("warn","db.slow_query",{sql:B,durationMs:H,...J})},job(B,H,J={}){R(H==="failed"?"error":"info",`job.${H}`,{jobName:B,...J})},cache(B,H,J={}){R("debug",`cache.${B}`,{key:H,...J})}};G.struct=m;export{s as withLogContext,m as struct,L as resolveLogSettings,e as report,S as renderNormalizedError,b as parseLogLevel,h as parseLogFormat,q as normalizeError,_ as normalizeContext,$ as logger,G as log,y as getLogContext,Y as formatMessage,r as echo,a as dump,t as dd};
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@stacksjs/logging",
|
|
3
3
|
"type": "module",
|
|
4
4
|
"sideEffects": false,
|
|
5
|
-
"version": "0.70.
|
|
5
|
+
"version": "0.70.345",
|
|
6
6
|
"description": "The Stacks logging system.",
|
|
7
7
|
"author": "Chris Breuer",
|
|
8
8
|
"contributors": [
|
|
@@ -61,12 +61,12 @@
|
|
|
61
61
|
"@stacksjs/clarity": "^0.3.31"
|
|
62
62
|
},
|
|
63
63
|
"devDependencies": {
|
|
64
|
-
"@stacksjs/cli": "0.70.
|
|
65
|
-
"@stacksjs/config": "0.70.
|
|
66
|
-
"@stacksjs/error-handling": "0.70.
|
|
67
|
-
"@stacksjs/path": "0.70.
|
|
68
|
-
"@stacksjs/storage": "0.70.
|
|
69
|
-
"@stacksjs/validation": "0.70.
|
|
64
|
+
"@stacksjs/cli": "0.70.345",
|
|
65
|
+
"@stacksjs/config": "0.70.345",
|
|
66
|
+
"@stacksjs/error-handling": "0.70.345",
|
|
67
|
+
"@stacksjs/path": "0.70.345",
|
|
68
|
+
"@stacksjs/storage": "0.70.345",
|
|
69
|
+
"@stacksjs/validation": "0.70.345",
|
|
70
70
|
"better-dx": "^0.2.17"
|
|
71
71
|
}
|
|
72
72
|
}
|