UNPKG

logpm

Version:
1 lines 1.41 kB
export const LogLevel=Object.freeze({Error:1,Warn:2,Info:3,Debug:4,Trace:5});const e=Object.freeze({1:"error",2:"warn",3:"info",4:"debug",5:"trace"});const t=new class{#e=/\{(?<token>[^{}]+?)\}/gim;tokenize(e,...t){let o=e||"";const s={};let r=0,n=null;for(;null!==(n=this.#e.exec(e));){const e=t?.[r++]||null,o=n.groups?.token;o&&!s[o]&&(s[o]=e)}for(const[e,t]of Object.entries(s))o=o.replaceAll(`{${e}}`,t);return{message:o,tokens:s}}};export class DefaultTimeProvider{get now(){return(new Date).toISOString()}}export class ConsoleLogStream{write(e){const t=JSON.stringify(e);console.log(t)}}export class Logger{#t;#o;#s;#r;constructor(e,t,o,s){if(this.#t=e||"","string"!=typeof this.#t)throw new Error("Context must be a string");this.#o=Object.freeze({...t}||null),this.#s=o||new DefaultTimeProvider,this.#r=s||new ConsoleLogStream}scopeTo(e,t){const o=this.#o?{...this.#o,...t}:t;return new Logger(e,o,this.#s,this.#r)}e(e,...t){this.ll(LogLevel.Error,e,...t)}w(e,...t){this.ll(LogLevel.Warn,e,...t)}i(e,...t){this.ll(LogLevel.Info,e,...t)}d(e,...t){this.ll(LogLevel.Debug,e,...t)}t(e,...t){this.ll(LogLevel.Trace,e,...t)}ll(o,s,...r){let n={...this.#o,"@timestamp":"",context:"",level:"",message:s};const l=t.tokenize(s,...r);for(let e of Object.getOwnPropertyNames(l.tokens))n[e]=l.tokens[e];n={...n,"@timestamp":this.#s.now,context:this.#t,level:e[o]||e[LogLevel.Info],message:l.message},this.#r.write(n)}}