multivocal
Version:
A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.
96 lines (76 loc) • 2.28 kB
JavaScript
var Util = require('./util');
var multivocal = require('debug')('multivocal');
var Level = {
all: {val: 0, func: console.log},
debug: {val: 10, func: console.log},
info: {val: 30, func: console.log},
warn: {val: 50, func: console.error},
error: {val: 70, func: console.error},
fatal: {val: 90, func: console.error},
none: {val:100, func: console.error}
};
var logLevel = Level.info;
var config = function( env ){
let level = Util.setting( env, 'Log/Level' );
if( typeof level !== 'undefined' ){
logLevel = level;
}
let modules = Util.setting( env, 'Log/Modules' );
if( modules ){
multivocal.enable(modules);
}
info('log', 'Logging %s at level %s', modules, logLevel);
return Promise.resolve( env );
};
exports.config = config;
var levelValStr = function( level ){
let ret = parseInt( level, 10 );
if( isNaN(ret) ){
ret = (Level[level] && (typeof Level[level].val !== 'undefined')) ? Level[level].val : Level.none.val;
}
return ret;
};
var levelVal = function( level = logLevel ){
switch( typeof level ){
case 'object': return level.val;
case 'number': return level;
case 'string': return levelValStr( level );
default: return Level.none.val;
}
};
var log = function( level, component, params ){
// Only log at or above our log level
var minLevel = levelVal();
if( level.val < minLevel ) return;
// Only log if the component is enabled
var l = multivocal.extend( component );
if( !l.enabled ) return;
// Set the console logging function to use
var func = level.func;
if( typeof func !== 'function' ){
func = console.error;
}
l.log = func.bind( console );
// Log
l.apply( null, params );
};
var debug = function( component, ...params ){
log( Level.debug, component, params );
};
exports.debug = debug;
var info = function( component, ...params ){
log( Level.info, component, params );
};
exports.info = info;
var warn = function( component, ...params ){
log( Level.warn, component, params );
};
exports.warn = warn;
var error = function( component, ...params ){
log( Level.error, component, params );
};
exports.error = error;
var fatal = function( component, ...params ){
log( Level.fatal, component, params );
};
exports.fatal = fatal;