@niivue/niivue
Version:
minimal webgl2 nifti image viewer
75 lines (65 loc) • 1.79 kB
text/typescript
interface LogLevelMap {
[key: string]: number
}
class Log {
level: string
name: string
constructor({ name = 'niivue', level = 'info' } = {}) {
this.name = `${name}`
this.level = level
}
// map 'debug' 'info' 'warn' 'error' 'fatal' 'silent' to numbers
// for comparison
static levels: LogLevelMap = {
debug: 0,
info: 1,
warn: 2,
error: 3,
fatal: 4,
silent: Infinity
}
debug(...args: unknown[]): void {
if (Log.levels[this.level] > Log.levels.debug) {
return
}
// eslint-disable-next-line
console.debug(`${this.name}-debug`, ...args)
}
info(...args: unknown[]): void {
if (Log.levels[this.level] > Log.levels.info) {
return
}
// eslint-disable-next-line
console.info(`${this.name}-info`, ...args)
}
warn(...args: unknown[]): void {
if (Log.levels[this.level] > Log.levels.warn) {
return
}
// eslint-disable-next-line
console.warn(`${this.name}-warn`, ...args)
}
error(...args: unknown[]): void {
if (Log.levels[this.level] > Log.levels.error) {
return
}
// eslint-disable-next-line
console.error(`${this.name}-error`, ...args)
}
fatal(...args: unknown[]): void {
if (Log.levels[this.level] > Log.levels.fatal) {
return
}
// eslint-disable-next-line
console.error(`${this.name}-fatal`, ...args)
}
setLogLevel(level: string): void {
this.level = level
}
setName(name: string): void {
this.name = name
}
}
// make a log instance and export it
const log = new Log({ name: 'niivue', level: 'info' })
export { log }