UNPKG

gnablib

Version:

A lean, zero dependency library to provide a useful base for your project.

2 lines 1.63 kB
/*! Copyright 2023-2024 the gnablib contributors MPL-1.1 */ import{color as t}from"../cli/csi-tables.js";import{DateTimeUtc as r}from"../datetime/dt.js";import{config as o}from"./Config.js";import{callFrom as e}from"./callFrom.js";import{LogLevel as s}from"./interfaces/ForLog.js";const{cyan:l,gray:i,yellow:n,red:g,magenta:a,reset:h}=t;class c{constructor(t,o,s,l){this.level=t,this.message=o,this.fields=s,this.when=l||r.now(),"caller"in s&&null==s.caller&&(this.fields.caller=e(2))}toString(t){const r=(s[this.level]+" ").substring(0,5);if(!t)return`[${r}] `+this.when.toString()+" "+this.message;return`[${[i,l,n,g][this.level]}${r}${h}] ${a}${this.when.toString()}${h} `+this.message}}class p{constructor(){this.supportColor=!1}log(){}}export class LogConsole{constructor(t=!0){this.supportColor=t&&o.getBool("color")}log(t){t.level==s.Error?console.error(t.toString(this.supportColor)+" "+JSON.stringify(t.fields)):console.log(t.toString(this.supportColor)+" "+JSON.stringify(t.fields))}}export class LogFilter{constructor(t,r=s.Info){this.target=t,this.ignoreUnder=null!=r?r:s.Info}get supportColor(){return this.target.supportColor}log(t){t.level<this.ignoreUnder||this.target.log(t)}}export const log=new class{constructor(){this._target=new p}set target(t){this._target.log(new c(s.Warn,"Log target being switched",{caller:void 0})),this._target=null!=t?t:new p}get supportColor(){return this._target.supportColor}debug(t,r={}){this._target.log(new c(s.Debug,t,r))}info(t,r={}){this._target.log(new c(s.Info,t,r))}warn(t,r={}){this._target.log(new c(s.Warn,t,r))}error(t,r={}){this._target.log(new c(s.Error,t,r))}};