Comparing version 0.2.1 to 0.3.1
121
index.js
@@ -32,67 +32,76 @@ 'use strict'; | ||
function createLog() { | ||
var Log = { | ||
transports: [], | ||
filters: [], | ||
function Log() { | ||
if (!(this instanceof Log)) { | ||
return new Log; | ||
} | ||
setLevel: function(prio) { | ||
this.level = prio; | ||
}, | ||
this.transports = []; | ||
this.filters = []; | ||
addTransport: function(fmt) { | ||
this.transports.push(fmt); | ||
}, | ||
this.v = this.println.bind(this, Log.VERBOSE); | ||
this.d = this.println.bind(this, Log.DEBUG); | ||
this.i = this.println.bind(this, Log.INFO); | ||
this.w = this.println.bind(this, Log.WARN); | ||
this.e = this.println.bind(this, Log.ERROR); | ||
this.wtf = this.println.bind(this, Log.ASSERT); | ||
addFilter: function(tag) { | ||
this.filters.push(tag); | ||
}, | ||
this.level = Log.INFO; | ||
} | ||
println: function(priority, tag /*, varargs */) { | ||
if (priority < this.level || this.filters.indexOf(tag) > -1) { | ||
return; | ||
} | ||
Object.defineProperties(Log, { | ||
'VERBOSE': { value: 2 }, | ||
'DEBUG': { value: 3 }, | ||
'INFO': { value: 4 }, | ||
'WARN': { value: 5 }, | ||
'ERROR': { value: 6 }, | ||
'ASSERT': { value: 7 }, | ||
var args = Array.prototype.constructor.apply(null, arguments).slice(2); | ||
args = parseArgs(args); | ||
'SHORT_NAMES': { | ||
value: [undefined, undefined, 'V', 'D', 'I', 'W', 'E', 'A'] | ||
} | ||
}); | ||
var ts = new Date; | ||
var len = Log.transports.length; | ||
for (var i = 0; i < len; ++i) { | ||
this.transports[i].call(this, ts, priority, tag, args); | ||
} | ||
Log.prototype = { | ||
setLevel: function(severity) { | ||
this.level = severity; | ||
}, | ||
addTransport: function(fmt) { | ||
this.transports.push(fmt); | ||
}, | ||
addFilter: function(tag) { | ||
this.filters.push(tag); | ||
}, | ||
println: function(severity, tag /*, varargs */) { | ||
if (severity < this.level || this.filters.indexOf(tag) > -1) { | ||
return; | ||
} | ||
}; | ||
Object.defineProperties(Log, { | ||
'VERBOSE': { value: 2 }, | ||
'DEBUG': { value: 3 }, | ||
'INFO': { value: 4 }, | ||
'WARN': { value: 5 }, | ||
'ERROR': { value: 6 }, | ||
'ASSERT': { value: 7 }, | ||
var args = [].slice.call(arguments, 2); | ||
args = parseArgs(args); | ||
'SHORT_NAMES': { | ||
value: [undefined, undefined, 'V', 'D', 'I', 'W', 'E', 'A'] | ||
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); | ||
} | ||
}); | ||
}, | ||
Log.v = Log.println.bind(Log, Log.VERBOSE); | ||
Log.d = Log.println.bind(Log, Log.DEBUG); | ||
Log.i = Log.println.bind(Log, Log.INFO); | ||
Log.w = Log.println.bind(Log, Log.WARN); | ||
Log.e = Log.println.bind(Log, Log.ERROR); | ||
Log.wtf = Log.println.bind(Log, Log.ASSERT); | ||
defaults: function() { | ||
this.transports = []; | ||
this.filters = []; | ||
Log.setLevel(Log.INFO); | ||
this.addTransport(ConsoleTransport); | ||
return Log; | ||
} | ||
return this; | ||
} | ||
}; | ||
var Log = createLog(); | ||
var ConsoleTransport = function(ts, prio, tag, args) { | ||
function ConsoleTransport(ts, severity, tag, args) { | ||
/*eslint-disable no-console */ | ||
var m; | ||
switch (prio) { | ||
switch (severity) { | ||
case Log.VERBOSE: | ||
@@ -109,8 +118,8 @@ case Log.DEBUG: | ||
default: | ||
Log.wtf('ConsoleTransport', 'invalid priority specified: ', prio, ', logging as error.'); | ||
Log.e(tag, args); | ||
this.wtf('ConsoleTransport', 'invalid severity specified: ', severity, ', logging as error.'); | ||
this.e(tag, args); | ||
return; | ||
} | ||
console[m](ts.toISOString() + ' [' + this.SHORT_NAMES[prio] + '] ' + tag + ': ' + (args.message || '')); | ||
console[m](ts.toISOString() + ' [' + Log.SHORT_NAMES[severity] + '] ' + tag + ': ' + (args.message || '')); | ||
@@ -120,6 +129,10 @@ if (args.err) { | ||
} | ||
}; | ||
} | ||
Log.addTransport(ConsoleTransport); | ||
var instance = new Log; | ||
module.exports = Log; | ||
// Oh. | ||
instance.Log = Log; | ||
instance.ConsoleTransport = ConsoleTransport; | ||
module.exports = instance; |
{ | ||
"name": "huggare", | ||
"version": "0.2.1", | ||
"version": "0.3.1", | ||
"description": "Android-style logging for an ECMAScript world.", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
# Huggare | ||
**Huggare** is a Swedish word for woodcutter. Whatever. | ||
**Huggare** is a Swedish word for woodcutter. Let's log. | ||
@@ -8,3 +8,3 @@ # Usage | ||
```javascript | ||
var Log = require('huggare'); | ||
var Log = require('huggare').defaults(); | ||
@@ -18,3 +18,14 @@ var TAG = "MyCrapModule"; | ||
function whatever() { | ||
Log.i(TAG, "I am interacting in a whateverish way."); | ||
Log.v(TAG, "I am interacting in a whateverish way."); | ||
Log.i(TAG, { | ||
message: "This is a message", | ||
someData: { a: "data item that might be used by another transport" } | ||
}); | ||
try { | ||
notAMethod(); | ||
} catch (err) { | ||
Log.e(TAG, "There was a sickening error", err); | ||
return; | ||
} | ||
} | ||
@@ -25,8 +36,32 @@ ``` | ||
`2015-08-02T05:14:23.924Z [I] MyCrapModule: I am interacting in a whateverish way.` | ||
``` | ||
2015-08-02T05:14:23.924Z [V] MyCrapModule: I am interacting in a whateverish way. | ||
2015-08-02T05:14:24.001Z [I] MyCrapModule: This is a message. | ||
2015-08-02T05:14:24:025Z [E] MyCrapModule: There was a sickening error | ||
ReferenceError: notAMethod is not defined | ||
at repl:1:1 | ||
at REPLServer.defaultEval (repl.js:164:27) | ||
at bound (domain.js:250:14) | ||
at REPLServer.runBound [as eval] (domain.js:263:12) | ||
at REPLServer.<anonymous> (repl.js:392:12) | ||
at emitOne (events.js:82:20) | ||
at REPLServer.emit (events.js:169:7) | ||
at REPLServer.Interface._onLine (readline.js:210:10) | ||
at REPLServer.Interface._line (readline.js:546:8) | ||
at REPLServer.Interface._ttyWrite (readline.js:823:14) | ||
``` | ||
Good. If you want more formatters, look at the sauce. | ||
## API | ||
Just look at the code for now. | ||
## Changelog | ||
0.3.1: Publishing fail. | ||
0.3.0: No transports by default now. Use `Log#defaults` as provided in example for old behaviour. | ||
0.2.0: Changed how the logger handles objects, allowing metadata | ||
0.1.0: First release | ||
# License | ||
ISC because whatever. | ||
ISC - see LICENSE file. |
5916
65
108