Skip to content

Instantly share code, notes, and snippets.

@andrewjjenkins
Last active August 29, 2015 13:55
Show Gist options
  • Save andrewjjenkins/8701921 to your computer and use it in GitHub Desktop.
Save andrewjjenkins/8701921 to your computer and use it in GitHub Desktop.
A really simple javascript module to log
var log = (function () {
"use strict";
var format = require('util').format;
// Customize levels, but do not name any level: "log" "getLevel" "setLevel"
var levels = { ERROR: 10, WARN: 20, INFO: 30, DEBUG: 40, TRACE: 50 };
var currentLevel = 'INFO';
function doGetLevel() { return currentLevel; }
function doSetLevel(level) {
if (!levels[level]) { throw new Error('No such level ' + level); }
currentLevel = level;
}
function doLog(level, otherArgs) {
if (!levels[level] || levels[level] > levels[currentLevel]) { return; }
var args = [].slice.call(arguments);
args.shift();
console.log(level + ': ' + format.apply(this, args));
}
var toRet = { log: doLog, getLevel: doGetLevel, setLevel: doSetLevel };
Object.getOwnPropertyNames(levels).forEach(function (level) {
this[level.toLowerCase()] = function () {
var args = [].slice.call(arguments);
args.unshift(level);
return doLog.apply(this, args);
}
}, toRet);
return toRet;
})();
// EXAMPLE
console.log('Log level is: ' + log.getLevel());
log.error('This is an error');
log.warn('This is a warning');
log.info('This is info');
log.debug('This is debug'); // Not seen
log.trace('This is trace'); // Not seen
// Adjust level
log.setLevel('TRACE');
console.log('Log level is: ' + log.getLevel());
log.error('This is an error');
log.warn('This is a warning');
log.info('This is info');
log.debug('This is debug');
log.trace('This is trace');
log.setLevel('WARN');
console.log('Log level is: ' + log.getLevel());
log.error('This is an error');
log.warn('This is a warning');
log.info('This is info'); // Not seen
log.debug('This is debug'); // Not seen
log.trace('This is trace'); // Not seen
// sprintf-style formatting.
log.warn('This is a %s generated at %s in process %d',
'warning', Date(), process.pid);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment