jsonl-logger 0.5.0 → 0.5.1

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/README.md CHANGED
@@ -23,10 +23,11 @@ npm install jsonl-logger
23
23
  import { logger } from 'jsonl-logger'
24
24
 
25
25
  logger.info('Server started', { port: 3000 })
26
+ logger.log('Neutral message', { note: 'no level icon' })
26
27
  logger.error('Request failed', { path: '/api' }, new Error('timeout'))
27
28
  ```
28
29
 
29
- Without `LOG_FORMAT`, the logger outputs colored plain text — ideal for local development. Set `LOG_FORMAT` to enable structured JSON for production (see Formatters below).
30
+ Without `LOG_FORMAT`, the logger outputs colored plain text with Unicode icons — ideal for local development. Set `LOG_FORMAT` to enable structured JSON for production (see Formatters below).
30
31
 
31
32
  ## Formatters
32
33
 
@@ -191,7 +192,7 @@ logger.error('API call failed', { endpoint: '/users' }, outer)
191
192
 
192
193
  **Dev mode** (no `LOG_FORMAT`) — colored plain text with full stack:
193
194
  ```
194
- 18:42:05 ERROR API call failed {"endpoint":"/users"}
195
+ 18:42:05 API call failed {"endpoint":"/users"}
195
196
  Error: fetch failed
196
197
  at handler (/app/api/route.ts:42:5)
197
198
  Caused by: Error: ECONNREFUSED
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
- var S={debug:"DEBUG",info:"INFO",warn:"WARNING",error:"ERROR",fatal:"CRITICAL"},L={messageKey:"message",format(t){let e={message:t.message,timestamp:t.timestamp,severity:S[t.level],...t.context};if(t.trace){if(e["logging.googleapis.com/trace"]=t.trace.traceId,e["logging.googleapis.com/spanId"]=t.trace.spanId,t.trace.traceFlags!==void 0)e["logging.googleapis.com/trace_sampled"]=(t.trace.traceFlags&1)===1}return e}};var x={messageKey:"_msg",format(t){let e={_msg:t.message,_time:t.timestamp,level:t.level,...t.context};if(t.trace){if(e.trace_id=t.trace.traceId,e.span_id=t.trace.spanId,t.trace.traceFlags!==void 0)e.trace_flags=t.trace.traceFlags}return e}};var R=process.env.LOG_LABELS==="text"?"text":process.env.LOG_LABELS==="none"?"none":"icon",c=process.env.LOG_FORMAT,w=!!c,a={debug:0,info:1,warn:2,error:3,fatal:4},y=/\x1b\[[0-9;]*m/g;function p(t){return t.replace(y,"")}function d(t,e,o="error"){if(t[`${o}.name`]=e.name,t[`${o}.message`]=e.message,e.stack)t[`${o}.stack`]=e.stack;if(e.cause)d(t,e.cause,`${o}.cause`)}var u=typeof process<"u"&&process.stdout&&typeof process.stdout.write==="function"?"node":typeof Deno<"u"&&Deno.stdout?"deno":"browser",C=u==="deno"?new TextEncoder:null;function I(t,e){if(u==="node")(e?process.stderr??process.stdout:process.stdout).write(`${t}
1
+ var y={debug:"DEBUG",info:"INFO",warn:"WARNING",error:"ERROR",fatal:"CRITICAL"},L={messageKey:"message",format(t){let e={message:t.message,timestamp:t.timestamp,severity:y[t.level],...t.context};if(t.trace){if(e["logging.googleapis.com/trace"]=t.trace.traceId,e["logging.googleapis.com/spanId"]=t.trace.spanId,t.trace.traceFlags!==void 0)e["logging.googleapis.com/trace_sampled"]=(t.trace.traceFlags&1)===1}return e}};var x={messageKey:"_msg",format(t){let e={_msg:t.message,_time:t.timestamp,level:t.level,...t.context};if(t.trace){if(e.trace_id=t.trace.traceId,e.span_id=t.trace.spanId,t.trace.traceFlags!==void 0)e.trace_flags=t.trace.traceFlags}return e}};var R=process.env.LOG_LABELS==="text"?"text":process.env.LOG_LABELS==="none"?"none":"icon",c=process.env.LOG_FORMAT,w=!!c,a={debug:0,info:1,warn:2,error:3,fatal:4},S=/\x1b\[[0-9;]*m/g;function p(t){return t.replace(S,"")}function d(t,e,o="error"){if(t[`${o}.name`]=e.name,t[`${o}.message`]=e.message,e.stack)t[`${o}.stack`]=e.stack;if(e.cause)d(t,e.cause,`${o}.cause`)}var u=typeof process<"u"&&process.stdout&&typeof process.stdout.write==="function"?"node":typeof Deno<"u"&&Deno.stdout?"deno":"browser",C=u==="deno"?new TextEncoder:null;function I(t,e){if(u==="node")(e?process.stderr??process.stdout:process.stdout).write(`${t}
2
2
  `);else if(u==="deno"&&C){let o=C.encode(`${t}
3
- `);if(e)Deno.stderr.writeSync(o);else Deno.stdout.writeSync(o)}else if(e)console.error(t);else console.log(t)}var E={"google-cloud-logging":L,"victoria-logs":x},O=c&&E[c]||L,F=w,j=process.env.LOG_LEVEL||(F?"info":"debug"),N={debug:!1,info:!1,warn:!1,error:!0,fatal:!0};function $(t,e){return e.add(t),{name:t.name,message:t.message,stack:t.stack,...t.cause instanceof Error&&!e.has(t.cause)?{cause:$(t.cause,e)}:{}}}function _(t){return $(t,new WeakSet)}var G={debug:"◆",info:"●",warn:"▲",error:"✖",fatal:"‼"};class h{ctx;min;json;fmt;labels;tc;constructor(t,e){this.ctx=t||{},this.json=e?.json??F,this.fmt=e?.formatter??O,this.labels=e?.labels??R,this.tc=e?.traceContext;let o=e?.level??j;this.min=a[o]??a.info}child(t){let e=new h({...this.ctx,...t},{json:this.json,formatter:this.fmt,labels:this.labels,traceContext:this.tc});return e.min=this.min,e}emit(t,e,o,i,v){if(a[t]<this.min)return;let n={level:t,message:this.json?p(e).trim():e,timestamp:new Date().toISOString(),context:o?{...this.ctx,...o}:this.ctx};if(this.tc)n.trace=this.tc();if(i)n.error=_(i);if(this.json){let g=this.fmt.format(n);if(n.error)d(g,n.error);I(JSON.stringify(g),N[t])}else this.logPlain(t,n,v)}logPlain(t,e,o){let i={debug:"\x1B[36m",info:"\x1B[32m",warn:"\x1B[33m",error:"\x1B[31m",fatal:"\x1B[35m"},v="\x1B[0m",n=i[t],g=new Date(e.timestamp).toLocaleTimeString("en-US",{hour12:!1}),r;if(this.labels==="none")r=" ";else if(this.labels==="text")r=o?" ":t.toUpperCase().padEnd(5);else r=o?" ":`${G[t]} `;let b=e.context,k=Object.keys(b).length>0?` ${JSON.stringify(b)}`:"",m="";if(e.error){let s=e.error,f=!0;while(s){if(s.stack)m+=f?`
3
+ `);if(e)Deno.stderr.writeSync(o);else Deno.stdout.writeSync(o)}else if(e)console.error(t);else console.log(t)}var E={"google-cloud-logging":L,"victoria-logs":x},O=c&&E[c]||L,F=w,j=process.env.LOG_LEVEL||(F?"info":"debug"),N={debug:!1,info:!1,warn:!1,error:!0,fatal:!0};function $(t,e){return e.add(t),{name:t.name,message:t.message,stack:t.stack,...t.cause instanceof Error&&!e.has(t.cause)?{cause:$(t.cause,e)}:{}}}function _(t){return $(t,new WeakSet)}var G={debug:"◆",info:"●",warn:"▲",error:"✖",fatal:"‼"};class h{ctx;min;json;fmt;labels;tc;constructor(t,e){this.ctx=t||{},this.json=e?.json??F,this.fmt=e?.formatter??O,this.labels=e?.labels??R,this.tc=e?.traceContext;let o=e?.level??j;this.min=a[o]??a.info}child(t){let e=new h({...this.ctx,...t},{json:this.json,formatter:this.fmt,labels:this.labels,traceContext:this.tc});return e.min=this.min,e}emit(t,e,o,i,b){if(a[t]<this.min)return;let n={level:t,message:this.json?p(e).trim():e,timestamp:new Date().toISOString(),context:o?{...this.ctx,...o}:this.ctx};if(this.tc)n.trace=this.tc();if(i)n.error=_(i);if(this.json){let g=this.fmt.format(n);if(n.error)d(g,n.error);I(JSON.stringify(g),N[t])}else this.logPlain(t,n,b)}logPlain(t,e,o){let i={debug:"\x1B[36m",info:"\x1B[32m",warn:"\x1B[33m",error:"\x1B[31m",fatal:"\x1B[35m"},b="\x1B[0m",n=i[t],g=new Date(e.timestamp).toLocaleTimeString("en-US",{hour12:!1}),r;if(this.labels==="none")r="";else if(this.labels==="text")r=o?" ":` ${t.toUpperCase().padEnd(5)}`;else r=o?" ":` ${G[t]}`;let v=e.context,k=Object.keys(v).length>0?` ${JSON.stringify(v)}`:"",m="";if(e.error){let s=e.error,f=!0;while(s){if(s.stack)m+=f?`
4
4
  ${s.stack}`:`
5
5
  Caused by: ${s.stack}`;else m+=f?`
6
6
  ${s.name}: ${s.message}`:`
7
- Caused by: ${s.name}: ${s.message}`;s=s.cause,f=!1}}let l=`${n}${g} ${r}\x1B[0m ${e.message}${k}${m}`;switch(t){case"debug":console.debug(l);break;case"warn":console.warn(l);break;case"error":case"fatal":console.error(l);break;default:console.log(l)}}log(t,e){this.emit("info",t,e,void 0,!0)}debug(t,e){this.emit("debug",t,e)}info(t,e){this.emit("info",t,e)}warn(t,e){this.emit("warn",t,e)}error(t,e,o){this.emit("error",t,e,o)}fatal(t,e,o){this.emit("fatal",t,e,o)}}var K=new h;export{p as stripAnsi,K as logger,a as logLevelValues,_ as errorInfo,h as Logger};
7
+ Caused by: ${s.name}: ${s.message}`;s=s.cause,f=!1}}let l=`${n}${g}${r}\x1B[0m ${e.message}${k}${m}`;switch(t){case"debug":console.debug(l);break;case"warn":console.warn(l);break;case"error":case"fatal":console.error(l);break;default:console.log(l)}}log(t,e){this.emit("info",t,e,void 0,!0)}debug(t,e){this.emit("debug",t,e)}info(t,e){this.emit("info",t,e)}warn(t,e){this.emit("warn",t,e)}error(t,e,o){this.emit("error",t,e,o)}fatal(t,e,o){this.emit("fatal",t,e,o)}}var K=new h;export{p as stripAnsi,K as logger,a as logLevelValues,_ as errorInfo,h as Logger};
package/dist/intercept.js CHANGED
@@ -1,7 +1,7 @@
1
- var y={debug:"DEBUG",info:"INFO",warn:"WARNING",error:"ERROR",fatal:"CRITICAL"},l={messageKey:"message",format(t){let o={message:t.message,timestamp:t.timestamp,severity:y[t.level],...t.context};if(t.trace){if(o["logging.googleapis.com/trace"]=t.trace.traceId,o["logging.googleapis.com/spanId"]=t.trace.spanId,t.trace.traceFlags!==void 0)o["logging.googleapis.com/trace_sampled"]=(t.trace.traceFlags&1)===1}return o}};var F={messageKey:"_msg",format(t){let o={_msg:t.message,_time:t.timestamp,level:t.level,...t.context};if(t.trace){if(o.trace_id=t.trace.traceId,o.span_id=t.trace.spanId,t.trace.traceFlags!==void 0)o.trace_flags=t.trace.traceFlags}return o}};var $=process.env.LOG_LABELS==="text"?"text":process.env.LOG_LABELS==="none"?"none":"icon",R=process.env.LOG_FORMAT,k=!!R,m={debug:0,info:1,warn:2,error:3,fatal:4},_=/\x1b\[[0-9;]*m/g;function b(t){return t.replace(_,"")}function u(t,o,e="error"){if(t[`${e}.name`]=o.name,t[`${e}.message`]=o.message,o.stack)t[`${e}.stack`]=o.stack;if(o.cause)u(t,o.cause,`${e}.cause`)}var I=typeof process<"u"&&process.stdout&&typeof process.stdout.write==="function"?"node":typeof Deno<"u"&&Deno.stdout?"deno":"browser",v=I==="deno"?new TextEncoder:null;function h(t,o){if(I==="node")(o?process.stderr??process.stdout:process.stdout).write(`${t}
2
- `);else if(I==="deno"&&v){let e=v.encode(`${t}
3
- `);if(o)Deno.stderr.writeSync(e);else Deno.stdout.writeSync(e)}else if(o)console.error(t);else console.log(t)}var E={"google-cloud-logging":l,"victoria-logs":F},N=R&&E[R]||l,S=k,T=process.env.LOG_LEVEL||(S?"info":"debug"),G={debug:!1,info:!1,warn:!1,error:!0,fatal:!0};function r(t,o){return o.add(t),{name:t.name,message:t.message,stack:t.stack,...t.cause instanceof Error&&!o.has(t.cause)?{cause:r(t.cause,o)}:{}}}function d(t){return r(t,new WeakSet)}var A={debug:"◆",info:"●",warn:"▲",error:"✖",fatal:"‼"};class w{ctx;min;json;fmt;labels;tc;constructor(t,o){this.ctx=t||{},this.json=o?.json??S,this.fmt=o?.formatter??N,this.labels=o?.labels??$,this.tc=o?.traceContext;let e=o?.level??T;this.min=m[e]??m.info}child(t){let o=new w({...this.ctx,...t},{json:this.json,formatter:this.fmt,labels:this.labels,traceContext:this.tc});return o.min=this.min,o}emit(t,o,e,n,f){if(m[t]<this.min)return;let i={level:t,message:this.json?b(o).trim():o,timestamp:new Date().toISOString(),context:e?{...this.ctx,...e}:this.ctx};if(this.tc)i.trace=this.tc();if(n)i.error=d(n);if(this.json){let s=this.fmt.format(i);if(i.error)u(s,i.error);h(JSON.stringify(s),G[t])}else this.logPlain(t,i,f)}logPlain(t,o,e){let n={debug:"\x1B[36m",info:"\x1B[32m",warn:"\x1B[33m",error:"\x1B[31m",fatal:"\x1B[35m"},f="\x1B[0m",i=n[t],s=new Date(o.timestamp).toLocaleTimeString("en-US",{hour12:!1}),a;if(this.labels==="none")a=" ";else if(this.labels==="text")a=e?" ":t.toUpperCase().padEnd(5);else a=e?" ":`${A[t]} `;let p=o.context,x=Object.keys(p).length>0?` ${JSON.stringify(p)}`:"",g="";if(o.error){let c=o.error,C=!0;while(c){if(c.stack)g+=C?`
1
+ var y={debug:"DEBUG",info:"INFO",warn:"WARNING",error:"ERROR",fatal:"CRITICAL"},l={messageKey:"message",format(t){let o={message:t.message,timestamp:t.timestamp,severity:y[t.level],...t.context};if(t.trace){if(o["logging.googleapis.com/trace"]=t.trace.traceId,o["logging.googleapis.com/spanId"]=t.trace.spanId,t.trace.traceFlags!==void 0)o["logging.googleapis.com/trace_sampled"]=(t.trace.traceFlags&1)===1}return o}};var F={messageKey:"_msg",format(t){let o={_msg:t.message,_time:t.timestamp,level:t.level,...t.context};if(t.trace){if(o.trace_id=t.trace.traceId,o.span_id=t.trace.spanId,t.trace.traceFlags!==void 0)o.trace_flags=t.trace.traceFlags}return o}};var k=process.env.LOG_LABELS==="text"?"text":process.env.LOG_LABELS==="none"?"none":"icon",R=process.env.LOG_FORMAT,v=!!R,m={debug:0,info:1,warn:2,error:3,fatal:4},_=/\x1b\[[0-9;]*m/g;function b(t){return t.replace(_,"")}function u(t,o,e="error"){if(t[`${e}.name`]=o.name,t[`${e}.message`]=o.message,o.stack)t[`${e}.stack`]=o.stack;if(o.cause)u(t,o.cause,`${e}.cause`)}var I=typeof process<"u"&&process.stdout&&typeof process.stdout.write==="function"?"node":typeof Deno<"u"&&Deno.stdout?"deno":"browser",$=I==="deno"?new TextEncoder:null;function h(t,o){if(I==="node")(o?process.stderr??process.stdout:process.stdout).write(`${t}
2
+ `);else if(I==="deno"&&$){let e=$.encode(`${t}
3
+ `);if(o)Deno.stderr.writeSync(e);else Deno.stdout.writeSync(e)}else if(o)console.error(t);else console.log(t)}var E={"google-cloud-logging":l,"victoria-logs":F},N=R&&E[R]||l,S=v,T=process.env.LOG_LEVEL||(S?"info":"debug"),G={debug:!1,info:!1,warn:!1,error:!0,fatal:!0};function O(t,o){return o.add(t),{name:t.name,message:t.message,stack:t.stack,...t.cause instanceof Error&&!o.has(t.cause)?{cause:O(t.cause,o)}:{}}}function d(t){return O(t,new WeakSet)}var A={debug:"◆",info:"●",warn:"▲",error:"✖",fatal:"‼"};class w{ctx;min;json;fmt;labels;tc;constructor(t,o){this.ctx=t||{},this.json=o?.json??S,this.fmt=o?.formatter??N,this.labels=o?.labels??k,this.tc=o?.traceContext;let e=o?.level??T;this.min=m[e]??m.info}child(t){let o=new w({...this.ctx,...t},{json:this.json,formatter:this.fmt,labels:this.labels,traceContext:this.tc});return o.min=this.min,o}emit(t,o,e,n,f){if(m[t]<this.min)return;let i={level:t,message:this.json?b(o).trim():o,timestamp:new Date().toISOString(),context:e?{...this.ctx,...e}:this.ctx};if(this.tc)i.trace=this.tc();if(n)i.error=d(n);if(this.json){let s=this.fmt.format(i);if(i.error)u(s,i.error);h(JSON.stringify(s),G[t])}else this.logPlain(t,i,f)}logPlain(t,o,e){let n={debug:"\x1B[36m",info:"\x1B[32m",warn:"\x1B[33m",error:"\x1B[31m",fatal:"\x1B[35m"},f="\x1B[0m",i=n[t],s=new Date(o.timestamp).toLocaleTimeString("en-US",{hour12:!1}),a;if(this.labels==="none")a="";else if(this.labels==="text")a=e?" ":` ${t.toUpperCase().padEnd(5)}`;else a=e?" ":` ${A[t]}`;let p=o.context,x=Object.keys(p).length>0?` ${JSON.stringify(p)}`:"",g="";if(o.error){let c=o.error,C=!0;while(c){if(c.stack)g+=C?`
4
4
  ${c.stack}`:`
5
5
  Caused by: ${c.stack}`;else g+=C?`
6
6
  ${c.name}: ${c.message}`:`
7
- Caused by: ${c.name}: ${c.message}`;c=c.cause,C=!1}}let L=`${i}${s} ${a}\x1B[0m ${o.message}${x}${g}`;switch(t){case"debug":console.debug(L);break;case"warn":console.warn(L);break;case"error":case"fatal":console.error(L);break;default:console.log(L)}}log(t,o){this.emit("info",t,o,void 0,!0)}debug(t,o){this.emit("debug",t,o)}info(t,o){this.emit("info",t,o)}warn(t,o){this.emit("warn",t,o)}error(t,o,e){this.emit("error",t,o,e)}fatal(t,o,e){this.emit("fatal",t,o,e)}}var X=new w;var tt={log:console.log.bind(console),info:console.info.bind(console),warn:console.warn.bind(console),error:console.error.bind(console),debug:console.debug.bind(console)};function J(...t){let o="";for(let e=0;e<t.length;e++){if(e>0)o+=" ";let n=t[e];if(typeof n==="string")o+=b(n);else if(n instanceof Error)o+=n.message;else try{o+=JSON.stringify(n)}catch{o+=String(n)}}return o.trim()}function U(...t){let o;for(let e of t)if(typeof e==="object"&&e!==null&&!(e instanceof Error)&&!Array.isArray(e)){if(!o)o={};Object.assign(o,e)}return o}function V(...t){for(let o of t)if(o instanceof Error)return o}var O={debug:!1,info:!1,warn:!1,error:!0,fatal:!0};function W(t,o,e,n,f){let i=`"${o.messageKey}"`;return(...s)=>{if(s.length===1&&typeof s[0]==="string"&&s[0].charCodeAt(0)===123&&s[0].includes(i)){h(s[0],O[t]);return}if(m[t]<e)return;let a=J(...s);if(n&&!n(t,a))return;let p=U(...s),x=V(...s),g={level:t,message:a,timestamp:new Date().toISOString(),context:p||{},error:x?d(x):void 0,trace:f?.()},L=o.format(g);if(g.error)u(L,g.error);h(JSON.stringify(L),O[t])}}var j="__jsonlLoggerIntercepted";function ot(t){if(globalThis[j])return;globalThis[j]=!0;let o=t?.formatter??l,e=m[t?.level??"debug"],n=t?.filter,f=t?.traceContext,i=[["log","info"],["info","info"],["warn","warn"],["error","error"],["debug","debug"]];for(let[s,a]of i)console[s]=W(a,o,e,n,f)}export{tt as originalConsole,ot as intercept};
7
+ Caused by: ${c.name}: ${c.message}`;c=c.cause,C=!1}}let L=`${i}${s}${a}\x1B[0m ${o.message}${x}${g}`;switch(t){case"debug":console.debug(L);break;case"warn":console.warn(L);break;case"error":case"fatal":console.error(L);break;default:console.log(L)}}log(t,o){this.emit("info",t,o,void 0,!0)}debug(t,o){this.emit("debug",t,o)}info(t,o){this.emit("info",t,o)}warn(t,o){this.emit("warn",t,o)}error(t,o,e){this.emit("error",t,o,e)}fatal(t,o,e){this.emit("fatal",t,o,e)}}var X=new w;var tt={log:console.log.bind(console),info:console.info.bind(console),warn:console.warn.bind(console),error:console.error.bind(console),debug:console.debug.bind(console)};function J(...t){let o="";for(let e=0;e<t.length;e++){if(e>0)o+=" ";let n=t[e];if(typeof n==="string")o+=b(n);else if(n instanceof Error)o+=n.message;else try{o+=JSON.stringify(n)}catch{o+=String(n)}}return o.trim()}function U(...t){let o;for(let e of t)if(typeof e==="object"&&e!==null&&!(e instanceof Error)&&!Array.isArray(e)){if(!o)o={};Object.assign(o,e)}return o}function V(...t){for(let o of t)if(o instanceof Error)return o}var j={debug:!1,info:!1,warn:!1,error:!0,fatal:!0};function W(t,o,e,n,f){let i=`"${o.messageKey}"`;return(...s)=>{if(s.length===1&&typeof s[0]==="string"&&s[0].charCodeAt(0)===123&&s[0].includes(i)){h(s[0],j[t]);return}if(m[t]<e)return;let a=J(...s);if(n&&!n(t,a))return;let p=U(...s),x=V(...s),g={level:t,message:a,timestamp:new Date().toISOString(),context:p||{},error:x?d(x):void 0,trace:f?.()},L=o.format(g);if(g.error)u(L,g.error);h(JSON.stringify(L),j[t])}}var r="__jsonlLoggerIntercepted";function ot(t){if(globalThis[r])return;globalThis[r]=!0;let o=t?.formatter??l,e=m[t?.level??"debug"],n=t?.filter,f=t?.traceContext,i=[["log","info"],["info","info"],["warn","warn"],["error","error"],["debug","debug"]];for(let[s,a]of i)console[s]=W(a,o,e,n,f)}export{tt as originalConsole,ot as intercept};
package/dist/preload.js CHANGED
@@ -1,7 +1,7 @@
1
- var N={debug:"DEBUG",info:"INFO",warn:"WARNING",error:"ERROR",fatal:"CRITICAL"},m={messageKey:"message",format(t){let o={message:t.message,timestamp:t.timestamp,severity:N[t.level],...t.context};if(t.trace){if(o["logging.googleapis.com/trace"]=t.trace.traceId,o["logging.googleapis.com/spanId"]=t.trace.spanId,t.trace.traceFlags!==void 0)o["logging.googleapis.com/trace_sampled"]=(t.trace.traceFlags&1)===1}return o}};var R={messageKey:"_msg",format(t){let o={_msg:t.message,_time:t.timestamp,level:t.level,...t.context};if(t.trace){if(o.trace_id=t.trace.traceId,o.span_id=t.trace.spanId,t.trace.traceFlags!==void 0)o.trace_flags=t.trace.traceFlags}return o}};var I=process.env.LOG_LABELS==="text"?"text":process.env.LOG_LABELS==="none"?"none":"icon",l=process.env.LOG_FORMAT,$=!!l,g={debug:0,info:1,warn:2,error:3,fatal:4},_=/\x1b\[[0-9;]*m/g;function u(t){return t.replace(_,"")}function p(t,o,e="error"){if(t[`${e}.name`]=o.name,t[`${e}.message`]=o.message,o.stack)t[`${e}.stack`]=o.stack;if(o.cause)p(t,o.cause,`${e}.cause`)}var F=typeof process<"u"&&process.stdout&&typeof process.stdout.write==="function"?"node":typeof Deno<"u"&&Deno.stdout?"deno":"browser",w=F==="deno"?new TextEncoder:null;function b(t,o){if(F==="node")(o?process.stderr??process.stdout:process.stdout).write(`${t}
2
- `);else if(F==="deno"&&w){let e=w.encode(`${t}
3
- `);if(o)Deno.stderr.writeSync(e);else Deno.stdout.writeSync(e)}else if(o)console.error(t);else console.log(t)}var j={"google-cloud-logging":m,"victoria-logs":R},G=l&&j[l]||m,k=$,T=process.env.LOG_LEVEL||(k?"info":"debug"),V={debug:!1,info:!1,warn:!1,error:!0,fatal:!0};function S(t,o){return o.add(t),{name:t.name,message:t.message,stack:t.stack,...t.cause instanceof Error&&!o.has(t.cause)?{cause:S(t.cause,o)}:{}}}function C(t){return S(t,new WeakSet)}var A={debug:"◆",info:"●",warn:"▲",error:"✖",fatal:"‼"};class v{ctx;min;json;fmt;labels;tc;constructor(t,o){this.ctx=t||{},this.json=o?.json??k,this.fmt=o?.formatter??G,this.labels=o?.labels??I,this.tc=o?.traceContext;let e=o?.level??T;this.min=g[e]??g.info}child(t){let o=new v({...this.ctx,...t},{json:this.json,formatter:this.fmt,labels:this.labels,traceContext:this.tc});return o.min=this.min,o}emit(t,o,e,n,r){if(g[t]<this.min)return;let i={level:t,message:this.json?u(o).trim():o,timestamp:new Date().toISOString(),context:e?{...this.ctx,...e}:this.ctx};if(this.tc)i.trace=this.tc();if(n)i.error=C(n);if(this.json){let s=this.fmt.format(i);if(i.error)p(s,i.error);b(JSON.stringify(s),V[t])}else this.logPlain(t,i,r)}logPlain(t,o,e){let n={debug:"\x1B[36m",info:"\x1B[32m",warn:"\x1B[33m",error:"\x1B[31m",fatal:"\x1B[35m"},r="\x1B[0m",i=n[t],s=new Date(o.timestamp).toLocaleTimeString("en-US",{hour12:!1}),c;if(this.labels==="none")c=" ";else if(this.labels==="text")c=e?" ":t.toUpperCase().padEnd(5);else c=e?" ":`${A[t]} `;let h=o.context,x=Object.keys(h).length>0?` ${JSON.stringify(h)}`:"",f="";if(o.error){let a=o.error,d=!0;while(a){if(a.stack)f+=d?`
1
+ var N={debug:"DEBUG",info:"INFO",warn:"WARNING",error:"ERROR",fatal:"CRITICAL"},m={messageKey:"message",format(t){let o={message:t.message,timestamp:t.timestamp,severity:N[t.level],...t.context};if(t.trace){if(o["logging.googleapis.com/trace"]=t.trace.traceId,o["logging.googleapis.com/spanId"]=t.trace.spanId,t.trace.traceFlags!==void 0)o["logging.googleapis.com/trace_sampled"]=(t.trace.traceFlags&1)===1}return o}};var R={messageKey:"_msg",format(t){let o={_msg:t.message,_time:t.timestamp,level:t.level,...t.context};if(t.trace){if(o.trace_id=t.trace.traceId,o.span_id=t.trace.spanId,t.trace.traceFlags!==void 0)o.trace_flags=t.trace.traceFlags}return o}};var v=process.env.LOG_LABELS==="text"?"text":process.env.LOG_LABELS==="none"?"none":"icon",l=process.env.LOG_FORMAT,$=!!l,g={debug:0,info:1,warn:2,error:3,fatal:4},_=/\x1b\[[0-9;]*m/g;function u(t){return t.replace(_,"")}function p(t,o,e="error"){if(t[`${e}.name`]=o.name,t[`${e}.message`]=o.message,o.stack)t[`${e}.stack`]=o.stack;if(o.cause)p(t,o.cause,`${e}.cause`)}var F=typeof process<"u"&&process.stdout&&typeof process.stdout.write==="function"?"node":typeof Deno<"u"&&Deno.stdout?"deno":"browser",I=F==="deno"?new TextEncoder:null;function b(t,o){if(F==="node")(o?process.stderr??process.stdout:process.stdout).write(`${t}
2
+ `);else if(F==="deno"&&I){let e=I.encode(`${t}
3
+ `);if(o)Deno.stderr.writeSync(e);else Deno.stdout.writeSync(e)}else if(o)console.error(t);else console.log(t)}var j={"google-cloud-logging":m,"victoria-logs":R},G=l&&j[l]||m,k=$,T=process.env.LOG_LEVEL||(k?"info":"debug"),V={debug:!1,info:!1,warn:!1,error:!0,fatal:!0};function S(t,o){return o.add(t),{name:t.name,message:t.message,stack:t.stack,...t.cause instanceof Error&&!o.has(t.cause)?{cause:S(t.cause,o)}:{}}}function C(t){return S(t,new WeakSet)}var A={debug:"◆",info:"●",warn:"▲",error:"✖",fatal:"‼"};class w{ctx;min;json;fmt;labels;tc;constructor(t,o){this.ctx=t||{},this.json=o?.json??k,this.fmt=o?.formatter??G,this.labels=o?.labels??v,this.tc=o?.traceContext;let e=o?.level??T;this.min=g[e]??g.info}child(t){let o=new w({...this.ctx,...t},{json:this.json,formatter:this.fmt,labels:this.labels,traceContext:this.tc});return o.min=this.min,o}emit(t,o,e,n,r){if(g[t]<this.min)return;let i={level:t,message:this.json?u(o).trim():o,timestamp:new Date().toISOString(),context:e?{...this.ctx,...e}:this.ctx};if(this.tc)i.trace=this.tc();if(n)i.error=C(n);if(this.json){let s=this.fmt.format(i);if(i.error)p(s,i.error);b(JSON.stringify(s),V[t])}else this.logPlain(t,i,r)}logPlain(t,o,e){let n={debug:"\x1B[36m",info:"\x1B[32m",warn:"\x1B[33m",error:"\x1B[31m",fatal:"\x1B[35m"},r="\x1B[0m",i=n[t],s=new Date(o.timestamp).toLocaleTimeString("en-US",{hour12:!1}),c;if(this.labels==="none")c="";else if(this.labels==="text")c=e?" ":` ${t.toUpperCase().padEnd(5)}`;else c=e?" ":` ${A[t]}`;let h=o.context,x=Object.keys(h).length>0?` ${JSON.stringify(h)}`:"",f="";if(o.error){let a=o.error,d=!0;while(a){if(a.stack)f+=d?`
4
4
  ${a.stack}`:`
5
5
  Caused by: ${a.stack}`;else f+=d?`
6
6
  ${a.name}: ${a.message}`:`
7
- Caused by: ${a.name}: ${a.message}`;a=a.cause,d=!1}}let L=`${i}${s} ${c}\x1B[0m ${o.message}${x}${f}`;switch(t){case"debug":console.debug(L);break;case"warn":console.warn(L);break;case"error":case"fatal":console.error(L);break;default:console.log(L)}}log(t,o){this.emit("info",t,o,void 0,!0)}debug(t,o){this.emit("debug",t,o)}info(t,o){this.emit("info",t,o)}warn(t,o){this.emit("warn",t,o)}error(t,o,e){this.emit("error",t,o,e)}fatal(t,o,e){this.emit("fatal",t,o,e)}}var Y=new v;var ot={log:console.log.bind(console),info:console.info.bind(console),warn:console.warn.bind(console),error:console.error.bind(console),debug:console.debug.bind(console)};function J(...t){let o="";for(let e=0;e<t.length;e++){if(e>0)o+=" ";let n=t[e];if(typeof n==="string")o+=u(n);else if(n instanceof Error)o+=n.message;else try{o+=JSON.stringify(n)}catch{o+=String(n)}}return o.trim()}function U(...t){let o;for(let e of t)if(typeof e==="object"&&e!==null&&!(e instanceof Error)&&!Array.isArray(e)){if(!o)o={};Object.assign(o,e)}return o}function W(...t){for(let o of t)if(o instanceof Error)return o}var y={debug:!1,info:!1,warn:!1,error:!0,fatal:!0};function B(t,o,e,n,r){let i=`"${o.messageKey}"`;return(...s)=>{if(s.length===1&&typeof s[0]==="string"&&s[0].charCodeAt(0)===123&&s[0].includes(i)){b(s[0],y[t]);return}if(g[t]<e)return;let c=J(...s);if(n&&!n(t,c))return;let h=U(...s),x=W(...s),f={level:t,message:c,timestamp:new Date().toISOString(),context:h||{},error:x?C(x):void 0,trace:r?.()},L=o.format(f);if(f.error)p(L,f.error);b(JSON.stringify(L),y[t])}}var O="__jsonlLoggerIntercepted";function E(t){if(globalThis[O])return;globalThis[O]=!0;let o=t?.formatter??m,e=g[t?.level??"debug"],n=t?.filter,r=t?.traceContext,i=[["log","info"],["info","info"],["warn","warn"],["error","error"],["debug","debug"]];for(let[s,c]of i)console[s]=B(c,o,e,n,r)}if(l){let o={"google-cloud-logging":m,"victoria-logs":R}[l]??m,e=process.env.LOG_LEVEL||"info";E({formatter:o,level:e})}
7
+ Caused by: ${a.name}: ${a.message}`;a=a.cause,d=!1}}let L=`${i}${s}${c}\x1B[0m ${o.message}${x}${f}`;switch(t){case"debug":console.debug(L);break;case"warn":console.warn(L);break;case"error":case"fatal":console.error(L);break;default:console.log(L)}}log(t,o){this.emit("info",t,o,void 0,!0)}debug(t,o){this.emit("debug",t,o)}info(t,o){this.emit("info",t,o)}warn(t,o){this.emit("warn",t,o)}error(t,o,e){this.emit("error",t,o,e)}fatal(t,o,e){this.emit("fatal",t,o,e)}}var Y=new w;var ot={log:console.log.bind(console),info:console.info.bind(console),warn:console.warn.bind(console),error:console.error.bind(console),debug:console.debug.bind(console)};function J(...t){let o="";for(let e=0;e<t.length;e++){if(e>0)o+=" ";let n=t[e];if(typeof n==="string")o+=u(n);else if(n instanceof Error)o+=n.message;else try{o+=JSON.stringify(n)}catch{o+=String(n)}}return o.trim()}function U(...t){let o;for(let e of t)if(typeof e==="object"&&e!==null&&!(e instanceof Error)&&!Array.isArray(e)){if(!o)o={};Object.assign(o,e)}return o}function W(...t){for(let o of t)if(o instanceof Error)return o}var y={debug:!1,info:!1,warn:!1,error:!0,fatal:!0};function B(t,o,e,n,r){let i=`"${o.messageKey}"`;return(...s)=>{if(s.length===1&&typeof s[0]==="string"&&s[0].charCodeAt(0)===123&&s[0].includes(i)){b(s[0],y[t]);return}if(g[t]<e)return;let c=J(...s);if(n&&!n(t,c))return;let h=U(...s),x=W(...s),f={level:t,message:c,timestamp:new Date().toISOString(),context:h||{},error:x?C(x):void 0,trace:r?.()},L=o.format(f);if(f.error)p(L,f.error);b(JSON.stringify(L),y[t])}}var O="__jsonlLoggerIntercepted";function E(t){if(globalThis[O])return;globalThis[O]=!0;let o=t?.formatter??m,e=g[t?.level??"debug"],n=t?.filter,r=t?.traceContext,i=[["log","info"],["info","info"],["warn","warn"],["error","error"],["debug","debug"]];for(let[s,c]of i)console[s]=B(c,o,e,n,r)}if(l){let o={"google-cloud-logging":m,"victoria-logs":R}[l]??m,e=process.env.LOG_LEVEL||"info";E({formatter:o,level:e})}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jsonl-logger",
3
- "version": "0.5.0",
3
+ "version": "0.5.1",
4
4
  "description": "Lightweight ESM-only JSON Lines logger with pluggable formatters for Google Cloud Logging, VictoriaLogs, and more",
5
5
  "license": "MIT",
6
6
  "type": "module",
package/src/index.ts CHANGED
@@ -163,13 +163,13 @@ export class Logger {
163
163
  hour12: false,
164
164
  })
165
165
 
166
- let levelStr: string
166
+ let label: string
167
167
  if (this.labels === 'none') {
168
- levelStr = ' '
168
+ label = ''
169
169
  } else if (this.labels === 'text') {
170
- levelStr = neutral ? ' ' : level.toUpperCase().padEnd(5)
170
+ label = neutral ? ' ' : ` ${level.toUpperCase().padEnd(5)}`
171
171
  } else {
172
- levelStr = neutral ? ' ' : `${levelIcons[level]} `
172
+ label = neutral ? ' ' : ` ${levelIcons[level]}`
173
173
  }
174
174
 
175
175
  const ctx = record.context
@@ -194,7 +194,7 @@ export class Logger {
194
194
  }
195
195
  }
196
196
 
197
- const output = `${color}${time} ${levelStr}${reset} ${record.message}${metaStr}${errStr}`
197
+ const output = `${color}${time}${label}${reset} ${record.message}${metaStr}${errStr}`
198
198
 
199
199
  switch (level) {
200
200
  case 'debug':