Comparing version 0.3.2 to 0.4.0
156
index.js
'use strict'; | ||
const util = require('util'); | ||
var util = require('util'); | ||
function parseArgs(args) { | ||
var o = {}; | ||
let o = {}; | ||
var len = args.length; | ||
var err; | ||
if (len > 0) { | ||
if (args[args.length-1] && args[args.length-1].stack) { | ||
err = args.pop(); | ||
len--; | ||
} | ||
let len = args.length; | ||
let err; | ||
// Special case for error-ish object (anything with stack) | ||
if (len > 0 && args[args.length - 1] && args[args.length - 1].stack) { | ||
err = args.pop(); | ||
len--; | ||
} | ||
@@ -21,3 +20,3 @@ | ||
} else if (len >= 1) { | ||
o.message = args.map(function(arg) { | ||
o.message = args.map(arg => { | ||
return util.isPrimitive(arg) ? arg : util.inspect(arg); | ||
@@ -33,34 +32,52 @@ }).join(' '); | ||
function Log() { | ||
if (!(this instanceof Log)) { | ||
return new Log; | ||
} | ||
const Severities = {}; | ||
this.transports = []; | ||
this.filters = []; | ||
{ | ||
let v = 2; | ||
this.v = this.println.bind(this, this.VERBOSE); | ||
this.d = this.println.bind(this, this.DEBUG); | ||
this.i = this.println.bind(this, this.INFO); | ||
this.w = this.println.bind(this, this.WARN); | ||
this.e = this.println.bind(this, this.ERROR); | ||
this.wtf = this.println.bind(this, this.ASSERT); | ||
for (const s of ['verbose', 'debug', 'info', 'warn', 'error', 'assert']) { | ||
const us = s.toUpperCase(); | ||
this.level = this.INFO; | ||
Object.defineProperty(Severities, us, { | ||
value: v, | ||
enumerable: true | ||
}); | ||
Object.defineProperty(Severities, v, { | ||
value: us, | ||
enumerable: true | ||
}); | ||
v++; | ||
} | ||
} | ||
Log.prototype = { | ||
setLevel: function(severity) { | ||
class Logger { | ||
constructor(level) { | ||
this.transports = []; | ||
this.filters = []; | ||
this.v = this.println.bind(this, Severities.VERBOSE); | ||
this.d = this.println.bind(this, Severities.DEBUG); | ||
this.i = this.println.bind(this, Severities.INFO); | ||
this.w = this.println.bind(this, Severities.WARN); | ||
this.e = this.println.bind(this, Severities.ERROR); | ||
this.wtf = this.println.bind(this, Severities.ASSERT); | ||
this.level = level || Severities.INFO; | ||
} | ||
setLevel(severity) { | ||
this.level = severity; | ||
}, | ||
} | ||
addTransport: function(fmt) { | ||
addTransport(fmt) { | ||
this.transports.push(fmt); | ||
}, | ||
} | ||
addFilter: function(tag) { | ||
addFilter(tag) { | ||
this.filters.push(tag); | ||
}, | ||
} | ||
println: function(severity, tag /*, varargs */) { | ||
println(severity, tag) { | ||
if (severity < this.level || this.filters.indexOf(tag) > -1) { | ||
@@ -70,75 +87,12 @@ return; | ||
var args = [].slice.call(arguments, 2); | ||
args = parseArgs(args); | ||
// pseudo-spread operator | ||
const args = parseArgs([].slice.call(arguments, 2)); | ||
const ts = new Date(); | ||
var ts = new Date; | ||
var len = this.transports.length; | ||
for (var i = 0; i < len; ++i) { | ||
this.transports[i].call(this, ts, severity, tag, args); | ||
for (const transport of this.transports) { | ||
transport.call(this, ts, severity, tag, args); | ||
} | ||
} | ||
}; | ||
var constants = { | ||
'VERBOSE': 2, | ||
'DEBUG': 3, | ||
'INFO': 4, | ||
'WARN': 5, | ||
'ERROR': 6, | ||
'ASSERT': 7, | ||
'SHORT_NAMES': [undefined, undefined, 'V', 'D', 'I', 'W', 'E', 'A'] | ||
}; | ||
Object.keys(constants).forEach(function(key) { | ||
Object.defineProperty(Log.prototype, key, { | ||
value: constants[key], | ||
enumerable: true | ||
}); | ||
}); | ||
var instance = new Log; | ||
instance.defaults = function() { | ||
if (this.transports.length || this.filters.length) { | ||
throw new Error('Already configured.'); | ||
} | ||
this.addTransport(ConsoleTransport); | ||
return this; | ||
}; | ||
function ConsoleTransport(ts, severity, tag, args) { | ||
/*eslint-disable no-console */ | ||
var m; | ||
switch (severity) { | ||
case this.VERBOSE: | ||
case this.DEBUG: | ||
case this.INFO: | ||
m = 'log'; | ||
break; | ||
case this.WARN: | ||
case this.ERROR: | ||
case this.ASSERT: | ||
m = 'error'; | ||
break; | ||
default: | ||
this.wtf('ConsoleTransport', 'invalid severity specified: ', severity, ', logging as error.'); | ||
this.e(tag, args); | ||
return; | ||
} | ||
console[m](ts.toISOString() + ' [' + this.SHORT_NAMES[severity] + '] ' + tag + ': ' + (args.message || '')); | ||
if (args.err) { | ||
console[m](args.err.stack); | ||
} | ||
} | ||
// Oh. | ||
instance.Log = Log; | ||
instance.ConsoleTransport = ConsoleTransport; | ||
module.exports = instance; | ||
module.exports = { Logger, Severities }; |
{ | ||
"name": "huggare", | ||
"version": "0.3.2", | ||
"version": "0.4.0", | ||
"description": "Android-style logging for an ECMAScript world.", | ||
@@ -13,5 +13,7 @@ "main": "index.js", | ||
"devDependencies": { | ||
"eslint": "^1.0.0", | ||
"babel-eslint": "^4.1.3", | ||
"eslint": "^1.6.0", | ||
"eslint-plugin-babel": "^2.1.1", | ||
"mocha": "^2.2.5" | ||
} | ||
} |
@@ -8,7 +8,8 @@ # Huggare | ||
```javascript | ||
var Log = require('huggare').defaults(); | ||
var huggare = require('huggare'); | ||
var Log = require('huggare-log'); | ||
var TAG = "MyCrapModule"; | ||
Log.setLevel(Log.VERBOSE); | ||
Log.setLevel(huggare.Severities.VERBOSE); | ||
@@ -58,2 +59,3 @@ /* Some time passes, nightmares are happening... */ | ||
* 0.4.0: **Breaking change**: use `huggare-log` for old `Log#defaults` feature. | ||
* 0.3.2: Fix misplaced constants | ||
@@ -60,0 +62,0 @@ * 0.3.1: Publishing fail |
Sorry, the diff of this file is not supported yet
8970
68
4
5
74