zombiebox
Version:
ZombieBox is a JavaScript framework for development of Smart TV and STB applications
134 lines (119 loc) • 2.02 kB
JavaScript
/*
* This file is part of the ZombieBox package.
*
* Copyright © 2012-2019, Interfaced
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
import ILogger from '../interfaces/i-logger';
import {Level} from '../console';
/**
* @implements {ILogger}
*/
export default class BaseLogger {
/**
*/
constructor() {
/**
* @type {function(Level, Array<*>)}
* @protected
*/
this._send;
/**
* @type {Object}
* @protected
*/
this._timers = {};
}
/**
* @override
*/
log(...args) {
this._log(Level.LOG, args);
}
/**
* @override
*/
debug(...args) {
this._log(Level.DEBUG, args);
}
/**
* @override
*/
info(...args) {
this._log(Level.INFO, args);
}
/**
* @override
*/
warn(...args) {
this._log(Level.WARN, args);
}
/**
* @override
*/
error(...args) {
this._log(Level.ERROR, args);
}
/**
* @override
*/
assert(...args) {
this._log(Level.ASSERT, args);
}
/**
* @override
*/
dir(...args) {
this._log(Level.DIR, args);
}
/**
* @override
*/
time(label) {
if (label) {
this._timers[label] = Date.now();
}
}
/**
* @override
*/
timeEnd(label) {
const timers = this._timers;
if (timers[label]) {
this._log(Level.TIME, [`${label}: ${Date.now() - timers[label]}ms`]);
delete timers[label];
}
}
/**
*
* @param {Level} level
* @param {Array} args
* @protected
*/
_log(level, args) {
if (!this._send) {
return;
}
this._send(level, Array.prototype.slice.call(args, 0));
}
/**
* @param {Level} level
* @return {string}
*/
static level2string(level) {
switch (level) {
case Level.LOG: return 'LOG';
case Level.DEBUG: return 'DEBUG';
case Level.INFO: return 'INFO';
case Level.WARN: return 'WARN';
case Level.ERROR: return 'ERROR';
case Level.ASSERT: return 'ASSERT';
case Level.DIR: return 'DIR';
case Level.TIME: return 'TIME';
default:
return 'ALL';
}
}
}