underscore.logger/ 0000755 0001750 0001750 00000000000 11675044273 013524 5 ustar jonas jonas underscore.logger/README.md 0000644 0001750 0001750 00000006140 11675043747 015011 0 ustar jonas jonas # underscore.logger
> Cross-browser and Node.js empowered logging.
## Install
```
npm install underscore.logger
```
### Browser
``` html
```
### Node.js
``` coffeescript
_console = require('underscore.logger')
```
If you want to make it useable everywhere in node:
``` coffeescript
global._console ||= require('underscore.logger')
```
### Underscore Mixin
``` coffeescript
_.mixin require('underscore.logger').toObject() # _.mixin(_console.toObject())
_.log "It works!"
_.error "Log %s in RED", "something"
```
## Api
``` coffeescript
# set the log level so anything above this won't show up
_console.level = _console.constructor.DEBUG
# you can access the constructor helpers like this as well:
Logger = _console.constructor
_console.level = Logger.DEBUG
# override default colors for any of the log levels
_console.colors[Logger.WARN] = Logger.ANSI.RED
# the first parameter is the message, any following parameters are variables.
_console.trace "I'm a trace"
_console.debug "Debug message"
_console.info "%s %s!", "Hello", "World" #=> "Hello World!"
_console.error "ERROR!"
_console.fatal "oh man..."
# set a custom `out` method, which defaults to `console.log`
_console.out = (message) -> alert(message)
# customize the format too if you'd like, which defaults to `[date] level message`
_console.format = (date, level, message) -> message
# watch the fps to see how your app is performing (`this` is the `Logger.Timer` object)
_console.on "frame" ->
$("#log-line-template").tmpl(@fps).appendTo("#log-panel")
```
To create a new one, maybe because you want two separate loggers (the edge case), you can use the constructor:
``` coffeescript
myLogger = new _console.constructor
```
## Resources
- http://en.wikipedia.org/wiki/Common_Log_Format
## Development
```
./node_modules/coffee-script/bin/coffee -o lib -w src
./node_modules/jasmine-node/bin/jasmine-node --coffee ./spec
```
## License
(The MIT License)
Copyright © 2011 [Lance Pollard](http://twitter.com/viatropos) <lancejpollard@gmail.com>
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
underscore.logger/.gitignore 0000644 0001750 0001750 00000000356 11675043747 015525 0 ustar jonas jonas ## MAC OS
.DS_Store
*.gem
## TEXTMATE
*.tmproj
tmtags
## EMACS
*~
\#*
.\#*
## VIM
*.swp
## PROJECT::GENERAL
coverage
rdoc
pkg
## PROJECT::SPECIFIC
doc
doc/*
doc/**/*
node_modules
node_modules/*
node_modules/**/*
spec/secrets.coffee underscore.logger/lib/ 0000755 0001750 0001750 00000000000 11675043747 014277 5 ustar jonas jonas underscore.logger/lib/underscore.logger.js 0000644 0001750 0001750 00000014205 11675043747 020266 0 ustar jonas jonas (function() {
var Logger;
Logger = (function() {
Logger.FATAL = 0;
Logger.ERROR = 1;
Logger.WARN = 2;
Logger.INFO = 3;
Logger.DEBUG = 4;
Logger.TRACE = 5;
Logger.levels = ["FATAL", "ERROR", "WARN", "INFO", "DEBUG", "TRACE"];
Logger.ANSI = {
OFF: 0,
BOLD: 1,
ITALIC: 3,
UNDERLINE: 4,
BLINK: 5,
INVERSE: 7,
HIDDEN: 8,
BLACK: 30,
RED: 31,
GREEN: 32,
YELLOW: 33,
BLUE: 34,
MAGENTA: 35,
CYAN: 36,
WHITE: 37,
BLACK_BG: 40,
RED_BG: 41,
GREEN_BG: 42,
YELLOW_BG: 43,
BLUE_BG: 44,
MAGENTA_BG: 45,
CYAN_BG: 46,
WHITE_BG: 47
};
Logger.colors = [Logger.ANSI.MAGENTA, Logger.ANSI.RED, Logger.ANSI.YELLOW, Logger.ANSI.GREEN, Logger.ANSI.CYAN, Logger.ANSI.BLUE];
function Logger(options) {
if (options == null) options = {};
this.level = options.level || Logger.DEBUG;
if (options.out) this.out = options.out;
this.colorized = options.hasOwnProperty("colorized") ? options.colorized : false;
this.colors = Logger.colors.concat();
}
Logger.prototype.out = function(message) {
return console.log(message);
};
Logger.prototype.colorize = function() {
var color, colors, i, result, string;
colors = Array.prototype.slice.call(arguments);
string = colors.shift();
result = "";
i = 0;
while (color = colors[i]) {
result += "\033[" + color + "m";
i++;
}
result += "" + string + "\033[" + Logger.ANSI.OFF + "m";
return result;
};
Logger.prototype.format = function(date, level, message) {
return "[" + (date.toUTCString()) + "] " + Logger.levels[level] + " " + message;
};
Logger.prototype._log = function(level, args) {
var i, message;
if (level <= this.level) {
i = 0;
message = args[0].replace(/%s/g, function() {
return args[i++];
});
message = this.format(new Date(), level, message);
if (this.colorized) message = this.colorize(message, this.colors[level]);
return this.out(message);
}
};
Logger.prototype.log = function() {
return this.info.apply(this, arguments);
};
Logger.prototype.fatal = function() {
return this._log(Logger.FATAL, arguments);
};
Logger.prototype.error = function() {
return this._log(Logger.ERROR, arguments);
};
Logger.prototype.warn = function() {
return this._log(Logger.WARN, arguments);
};
Logger.prototype.info = function() {
return this._log(Logger.INFO, arguments);
};
Logger.prototype.debug = function() {
return this._log(Logger.DEBUG, arguments);
};
Logger.prototype.trace = function() {
return this._log(Logger.TRACE, arguments);
};
Logger.prototype.group = function() {};
Logger.prototype.on = function(event, callback) {
var _ref;
switch (event) {
case "message":
this;
break;
case "line":
this;
break;
case "frame":
if ((_ref = this.timer) == null) this.timer = new Logger.Timer();
this.timer.on(event, callback);
break;
case "bench":
this;
}
return this;
};
Logger.prototype.toObject = function() {
var logger;
logger = this;
return {
log: function() {
return logger.log.apply(logger, arguments);
},
fatal: function() {
return logger.fatal.apply(logger, arguments);
},
error: function() {
return logger.error.apply(logger, arguments);
},
warn: function() {
return logger.warn.apply(logger, arguments);
},
info: function() {
return logger.info.apply(logger, arguments);
},
debug: function() {
return logger.debug.apply(logger, arguments);
},
trace: function() {
return logger.trace.apply(logger, arguments);
}
};
};
Logger.Timer = (function() {
function Timer() {
this.now = Date.now();
this.time_last_frame = this.now;
this.time_last_second = this.now;
this.fps = 0;
this.fps_min = 1000;
this.fps_max = 0;
this.ms = 0;
this.ms_min = 0;
this.ms_max = 0;
this.frames = 0;
this.handlers = [];
}
Timer.prototype.on = function(event, callback) {
this.handlers.push(callback);
return this.start();
};
Timer.prototype.start = function() {
var self;
if (this.timer) return this;
self = this;
this.timer = setInterval((function() {
return self.update();
}), 1000 / 60);
return this;
};
Timer.prototype.stop = function() {
clearInterval(this.timer);
this.timer = null;
return this;
};
Timer.prototype.update = function() {
var handler, _i, _len, _ref, _results;
this.now = Date.now();
this.ms = this.now - this.time_last_frame;
this.ms_min = Math.min(this.ms_min, this.ms);
this.ms_max = Math.max(this.ms_max, this.ms);
this.time_last_frame = this.now;
this.frames += 1;
if (this.now > (this.time_last_second + 1000)) {
this.fps = Math.round((this.frames * 1000) / (this.now - this.time_last_second));
this.fps_min = Math.min(this.fps_min, this.fps);
this.fps_max = Math.max(this.fps_max, this.fps);
this.time_last_second = this.now;
this.frames = 0;
_ref = this.handlers;
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
handler = _ref[_i];
_results.push(handler.apply(this));
}
return _results;
}
};
return Timer;
})();
return Logger;
})();
if (typeof module === 'undefined' || typeof window !== 'undefined') {
window["_console"] = new Logger({
colorized: false
});
} else {
module.exports = new Logger({
colorized: true
});
}
}).call(this);
underscore.logger/spec/ 0000755 0001750 0001750 00000000000 11675043747 014463 5 ustar jonas jonas underscore.logger/spec/index.html 0000644 0001750 0001750 00000000323 11675043747 016456 0 ustar jonas jonas
Common Logger Spec
underscore.logger/spec/loggerSpec.coffee 0000644 0001750 0001750 00000004547 11675043747 017740 0 ustar jonas jonas _console = require('../lib/underscore.logger')
Logger = _console.constructor
_ = require 'underscore'
describe 'common-logger', ->
describe 'levels', ->
it "should default to debug", ->
expect(_console.level).toEqual Logger.DEBUG
it "should accept a new log level", ->
_console.level = Logger.ERROR
expect(_console.level).toEqual Logger.ERROR
_console.level = Logger.DEBUG
describe 'color', ->
it "should have default colors", ->
expect(_console.colors[Logger.TRACE]).toEqual Logger.ANSI.BLUE
expect(_console.colors[Logger.DEBUG]).toEqual Logger.ANSI.CYAN
describe 'format', ->
beforeEach ->
_console.colorized = false
_console.out = (m) -> m
afterEach ->
_console.colorized = true
_console.out = (m) -> console.log m
it 'should default to a date format', ->
now = new Date().toUTCString()
expect(_console.info('format')).toEqual "[#{now}] INFO format"
describe 'file', ->
describe 'stream', ->
describe 'grouping', ->
describe 'benchmarking', ->
describe 'fps', ->
beforeEach ->
_console.colorized = false
afterEach ->
_console.colorized = true
it "should clock it!", ->
_console.on "frame", ->
expect(@fps).toEqual 60
@stop()
describe 'cross-browser', ->
describe 'underscore mixin', ->
beforeEach ->
_console.colorized = false
_console.out = (m) -> m
afterEach ->
_console.colorized = true
_console.out = (m) -> console.log m
it 'should become a mixin!', ->
expect(_.log).toEqual undefined
expect(_.fatal).toEqual undefined
expect(_.error).toEqual undefined
expect(_.warn).toEqual undefined
expect(_.info).toEqual undefined
expect(_.debug).toEqual undefined
expect(_.trace).toEqual undefined
_.mixin _console.toObject()
expect(_.log).toNotEqual undefined
expect(_.fatal).toNotEqual undefined
expect(_.error).toNotEqual undefined
expect(_.warn).toNotEqual undefined
expect(_.info).toNotEqual undefined
expect(_.debug).toNotEqual undefined
expect(_.trace).toNotEqual undefined
now = new Date().toUTCString()
expect(_.info('format')).toEqual "[#{now}] INFO format" underscore.logger/npm-debug.log 0000644 0001750 0001750 00000043506 11675043747 016122 0 ustar jonas jonas info it worked if it ends with ok
verbose cli [ 'node', '/usr/local/bin/npm', 'publish' ]
info using npm@1.0.105
info using node@v0.6.1
verbose /usr/local/bin/node node symlink
verbose config file /Users/viatropos/.npmrc
verbose config file /usr/local/etc/npmrc
verbose config file /usr/local/lib/node_modules/npm/npmrc
verbose publish [ '.' ]
silly testEngine { name: 'underscore.logger',
silly testEngine version: '0.3.0',
silly testEngine description: 'Cross-browser and Node.js empowered logging. Use as Underscore.js mixin if desired.',
silly testEngine homepage: 'http://github.com/viatropos/underscore.logger.js',
silly testEngine main: 'lib/underscore.logger.js',
silly testEngine author: { name: 'Lance Pollard', email: 'lancejpollard@gmail.com' },
silly testEngine keywords: [ 'logging', 'node', 'browser' ],
silly testEngine licenses: [ { type: 'MIT', url: 'http://mths.be/mit' } ],
silly testEngine bugs: { url: 'https://github.com/viatropos/underscore.logger.js/issues' },
silly testEngine repository:
silly testEngine { type: 'git',
silly testEngine url: 'git://github.com/viatropos/underscore.logger.js.git' },
silly testEngine directories: { test: 'spec' },
silly testEngine _npmUser: { name: 'viatropos', email: 'lancejpollard@gmail.com' },
silly testEngine _id: 'underscore.logger@0.3.0',
silly testEngine dependencies: {},
silly testEngine devDependencies: {},
silly testEngine engines: { node: '*' },
silly testEngine _engineSupported: true,
silly testEngine _npmVersion: '1.0.105',
silly testEngine _nodeVersion: 'v0.6.1',
silly testEngine _defaultsLoaded: true,
silly testEngine scripts: {} }
verbose caching /Users/viatropos/Documents/git/personal/plugins/underscore.logger/package.json
verbose loadDefaults underscore.logger@0.3.0
info prepublish underscore.logger@0.3.0
verbose cache add [ '.', null ]
silly cache add: name, spec, args [ undefined, '.', [ '.', null ] ]
verbose parsed url { pathname: '.', path: '.', href: '.' }
silly testEngine { name: 'underscore.logger',
silly testEngine version: '0.3.0',
silly testEngine description: 'Cross-browser and Node.js empowered logging. Use as Underscore.js mixin if desired.',
silly testEngine homepage: 'http://github.com/viatropos/underscore.logger.js',
silly testEngine main: 'lib/underscore.logger.js',
silly testEngine author: { name: 'Lance Pollard', email: 'lancejpollard@gmail.com' },
silly testEngine keywords: [ 'logging', 'node', 'browser' ],
silly testEngine licenses: [ { type: 'MIT', url: 'http://mths.be/mit' } ],
silly testEngine bugs: { url: 'https://github.com/viatropos/underscore.logger.js/issues' },
silly testEngine repository:
silly testEngine { type: 'git',
silly testEngine url: 'git://github.com/viatropos/underscore.logger.js.git' },
silly testEngine directories: { test: 'spec' },
silly testEngine _npmUser: { name: 'viatropos', email: 'lancejpollard@gmail.com' },
silly testEngine _id: 'underscore.logger@0.3.0',
silly testEngine dependencies: {},
silly testEngine devDependencies: {},
silly testEngine engines: { node: '*' },
silly testEngine _engineSupported: true,
silly testEngine _npmVersion: '1.0.105',
silly testEngine _nodeVersion: 'v0.6.1',
silly testEngine _defaultsLoaded: true,
silly testEngine path: '/Users/viatropos/Documents/git/personal/plugins/underscore.logger',
silly testEngine bundleDependencies: [] }
verbose caching package.json
verbose loadDefaults underscore.logger@0.3.0
verbose pack /Users/viatropos/Documents/git/personal/plugins/underscore.logger /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/tmp.tgz
silly makeList /Users/viatropos/Documents/git/personal/plugins/underscore.logger
verbose mkdir (expected) error ENOENT, no such file or directory '/var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687'
verbose mkdir (expected) error ENOENT, no such file or directory '/var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107'
verbose mkdir done: /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107 755
verbose mkdir'ed /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107
verbose tar about to write tar and gzip it.
silly tar args [ '-czvf', '-', '-T', '-' ]
silly spawning [ 'tar',
silly spawning [ '-czvf', '-', '-T', '-' ],
silly spawning '/Users/viatropos/Documents/git/personal/plugins' ]
verbose mkdir (expected) error ENOENT, no such file or directory '/var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents'
verbose mkdir (expected) error ENOENT, no such file or directory '/var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm'
verbose mkdir done: /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm 755
verbose unpack_ uid, gid [ undefined, undefined ]
verbose unpackTarget /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/package
silly gunzTarPerm modes [ '755', '644' ]
silly spawning [ 'tar',
silly spawning [ '-zmvxpf',
silly spawning '/var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/tmp.tgz' ],
silly spawning '/var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm' ]
silly tar err x underscore.logger/.gitignore
silly tar err x underscore.logger/Cakefile
silly tar err x underscore.logger/package.json
silly tar err x underscore.logger/README.md
silly tar err x underscore.logger/lib/underscore.logger.js
silly tar err x underscore.logger/spec/index.html
silly tar err x underscore.logger/spec/loggerSpec.coffee
silly tar err x underscore.logger/src/underscore.logger.coffee
silly tar exit 0
silly asyncMap in gTP /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm/underscore.logger
silly asyncMap in gTP /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm/underscore.logger/.gitignore
silly asyncMap in gTP /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm/underscore.logger/Cakefile
silly asyncMap in gTP /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm/underscore.logger/package.json
silly asyncMap in gTP /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm/underscore.logger/README.md
silly asyncMap in gTP /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm/underscore.logger/lib
silly asyncMap in gTP /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm/underscore.logger/lib/underscore.logger.js
silly asyncMap in gTP /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm/underscore.logger/spec
silly asyncMap in gTP /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm/underscore.logger/spec/index.html
silly asyncMap in gTP /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm/underscore.logger/spec/loggerSpec.coffee
silly asyncMap in gTP /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm/underscore.logger/src
silly asyncMap in gTP /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm/underscore.logger/src/underscore.logger.coffee
verbose gunzed /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm/underscore.logger
verbose rm'ed /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/package
verbose renamed [ '/var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/___package.npm/underscore.logger',
verbose renamed '/var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/package' ]
silly testEngine { name: 'underscore.logger',
silly testEngine version: '0.3.0',
silly testEngine description: 'Cross-browser and Node.js empowered logging. Use as Underscore.js mixin if desired.',
silly testEngine homepage: 'http://github.com/viatropos/underscore.logger.js',
silly testEngine main: 'lib/underscore.logger.js',
silly testEngine author: { name: 'Lance Pollard', email: 'lancejpollard@gmail.com' },
silly testEngine keywords: [ 'logging', 'node', 'browser' ],
silly testEngine licenses: [ { type: 'MIT', url: 'http://mths.be/mit' } ],
silly testEngine bugs: { url: 'https://github.com/viatropos/underscore.logger.js/issues' },
silly testEngine repository:
silly testEngine { type: 'git',
silly testEngine url: 'git://github.com/viatropos/underscore.logger.js.git' },
silly testEngine directories: { test: 'spec' },
silly testEngine _npmUser: { name: 'viatropos', email: 'lancejpollard@gmail.com' },
silly testEngine _id: 'underscore.logger@0.3.0',
silly testEngine dependencies: {},
silly testEngine devDependencies: {},
silly testEngine engines: { node: '*' },
silly testEngine _engineSupported: true,
silly testEngine _npmVersion: '1.0.105',
silly testEngine _nodeVersion: 'v0.6.1',
silly testEngine _defaultsLoaded: true,
silly testEngine path: '/var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/package' }
verbose caching /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/package/package.json
verbose loadDefaults underscore.logger@0.3.0
verbose tarball contents [ 'package' ]
verbose from cache /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/package/package.json
verbose pack /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/package /Users/viatropos/.npm/underscore.logger/0.3.0/package.tgz
silly makeList /var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents/package
verbose mkdir'ed /Users/viatropos/.npm/underscore.logger/0.3.0
verbose tar about to write tar and gzip it.
silly tar args [ '-czvf', '-', '-T', '-' ]
silly spawning [ 'tar',
silly spawning [ '-czvf', '-', '-T', '-' ],
silly spawning '/var/folders/T4/T4Hvwd2MEsWu2cjSEFKHwU+++TI/-Tmp-/npm-1321321493687/1321321493687-0.6740006066393107/contents' ]
verbose mkdir (expected) error ENOENT, no such file or directory '/Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm'
verbose mkdir done: /Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm 755
verbose unpack_ uid, gid [ undefined, undefined ]
verbose unpackTarget /Users/viatropos/.npm/underscore.logger/0.3.0/package
silly gunzTarPerm modes [ '755', '644' ]
silly spawning [ 'tar',
silly spawning [ '-zmvxpf',
silly spawning '/Users/viatropos/.npm/underscore.logger/0.3.0/package.tgz' ],
silly spawning '/Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm' ]
silly tar err x package/.gitignore
silly tar err x package/Cakefile
silly tar err x package/package.json
silly tar err x package/README.md
silly tar err x package/lib/underscore.logger.js
silly tar err x package/spec/index.html
silly tar err x package/spec/loggerSpec.coffee
silly tar err x package/src/underscore.logger.coffee
silly tar exit 0
silly asyncMap in gTP /Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm/package
silly asyncMap in gTP /Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm/package/.gitignore
silly asyncMap in gTP /Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm/package/Cakefile
silly asyncMap in gTP /Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm/package/package.json
silly asyncMap in gTP /Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm/package/README.md
silly asyncMap in gTP /Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm/package/lib
silly asyncMap in gTP /Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm/package/lib/underscore.logger.js
silly asyncMap in gTP /Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm/package/spec
silly asyncMap in gTP /Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm/package/spec/index.html
silly asyncMap in gTP /Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm/package/spec/loggerSpec.coffee
silly asyncMap in gTP /Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm/package/src
silly asyncMap in gTP /Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm/package/src/underscore.logger.coffee
verbose gunzed /Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm/package
verbose rm'ed /Users/viatropos/.npm/underscore.logger/0.3.0/package
verbose renamed [ '/Users/viatropos/.npm/underscore.logger/0.3.0/___package.npm/package',
verbose renamed '/Users/viatropos/.npm/underscore.logger/0.3.0/package' ]
silly testEngine { name: 'underscore.logger',
silly testEngine version: '0.3.0',
silly testEngine description: 'Cross-browser and Node.js empowered logging. Use as Underscore.js mixin if desired.',
silly testEngine homepage: 'http://github.com/viatropos/underscore.logger.js',
silly testEngine main: 'lib/underscore.logger.js',
silly testEngine author: { name: 'Lance Pollard', email: 'lancejpollard@gmail.com' },
silly testEngine keywords: [ 'logging', 'node', 'browser' ],
silly testEngine licenses: [ { type: 'MIT', url: 'http://mths.be/mit' } ],
silly testEngine bugs: { url: 'https://github.com/viatropos/underscore.logger.js/issues' },
silly testEngine repository:
silly testEngine { type: 'git',
silly testEngine url: 'git://github.com/viatropos/underscore.logger.js.git' },
silly testEngine directories: { test: 'spec' },
silly testEngine _npmUser: { name: 'viatropos', email: 'lancejpollard@gmail.com' },
silly testEngine _id: 'underscore.logger@0.3.0',
silly testEngine dependencies: {},
silly testEngine devDependencies: {},
silly testEngine engines: { node: '*' },
silly testEngine _engineSupported: true,
silly testEngine _npmVersion: '1.0.105',
silly testEngine _nodeVersion: 'v0.6.1',
silly testEngine _defaultsLoaded: true,
silly testEngine dist:
silly testEngine { shasum: '6966a81e1e31bbfa017c2f42655d1d6331b3c9fe',
silly testEngine tarball: 'http://registry.npmjs.org/underscore.logger/-/underscore.logger-0.3.0.tgz' } }
verbose caching /Users/viatropos/.npm/underscore.logger/0.3.0/package/package.json
verbose loadDefaults underscore.logger@0.3.0
silly updated sha bytes 10240
info shasum 6966a81e1e31bbfa017c2f42655d1d6331b3c9fe
info shasum /Users/viatropos/.npm/underscore.logger/0.3.0/package.tgz
verbose from cache /Users/viatropos/.npm/underscore.logger/0.3.0/package/package.json
verbose chmod /Users/viatropos/.npm/underscore.logger/0.3.0/package.tgz 644
verbose chown [ '/Users/viatropos/.npm/underscore.logger/0.3.0/package.tgz',
verbose chown 501,
verbose chown 20 ]
silly publish { name: 'underscore.logger',
silly publish version: '0.3.0',
silly publish description: 'Cross-browser and Node.js empowered logging. Use as Underscore.js mixin if desired.',
silly publish homepage: 'http://github.com/viatropos/underscore.logger.js',
silly publish main: 'lib/underscore.logger.js',
silly publish author: { name: 'Lance Pollard', email: 'lancejpollard@gmail.com' },
silly publish keywords: [ 'logging', 'node', 'browser' ],
silly publish licenses: [ { type: 'MIT', url: 'http://mths.be/mit' } ],
silly publish bugs: { url: 'https://github.com/viatropos/underscore.logger.js/issues' },
silly publish repository:
silly publish { type: 'git',
silly publish url: 'git://github.com/viatropos/underscore.logger.js.git' },
silly publish directories: { test: 'spec' },
silly publish _npmUser: { name: 'viatropos', email: 'lancejpollard@gmail.com' },
silly publish _id: 'underscore.logger@0.3.0',
silly publish dependencies: {},
silly publish devDependencies: {},
silly publish engines: { node: '*' },
silly publish _engineSupported: true,
silly publish _npmVersion: '1.0.105',
silly publish _nodeVersion: 'v0.6.1',
silly publish _defaultsLoaded: true,
silly publish dist:
silly publish { shasum: '6966a81e1e31bbfa017c2f42655d1d6331b3c9fe',
silly publish tarball: 'http://registry.npmjs.org/underscore.logger/-/underscore.logger-0.3.0.tgz' } }
verbose PUT underscore.logger
verbose raw, before any munging underscore.logger
verbose url resolving [ 'https://registry.npmjs.org/', './underscore.logger' ]
verbose url resolved https://registry.npmjs.org/underscore.logger
verbose GET underscore.logger
verbose raw, before any munging underscore.logger
verbose url resolving [ 'https://registry.npmjs.org/', './underscore.logger' ]
verbose url resolved https://registry.npmjs.org/underscore.logger
info Already published underscore.logger@0.3.0
verbose uploading bin dists []
ERR! publish fail Cannot publish over existing version.
ERR! publish fail Bump the 'version' field, set the --force flag, or
ERR! publish fail npm unpublish 'underscore.logger@0.3.0'
ERR! publish fail and try again
ERR!
ERR! System Darwin 10.7.0
ERR! command "node" "/usr/local/bin/npm" "publish"
ERR! cwd /Users/viatropos/Documents/git/personal/plugins/underscore.logger
ERR! node -v v0.6.1
ERR! npm -v 1.0.105
ERR! code EPUBLISHCONFLICT
verbose exit [ 1, true ]
underscore.logger/package.json 0000644 0001750 0001750 00000001305 11675043747 016016 0 ustar jonas jonas {
"name": "underscore.logger",
"version": "0.3.0",
"description": "Cross-browser and Node.js empowered logging. Use as Underscore.js mixin if desired.",
"homepage": "http://github.com/viatropos/underscore.logger.js",
"main": "lib/underscore.logger.js",
"author": "Lance Pollard ",
"keywords": [
"logging",
"node",
"browser"
],
"licenses": [
{
"type": "MIT",
"url": "http://mths.be/mit"
}
],
"bugs": {
"url": "https://github.com/viatropos/underscore.logger.js/issues"
},
"repository": {
"type": "git",
"url": "https://github.com/viatropos/underscore.logger.js.git"
},
"directories": {
"test": "spec"
}
}
underscore.logger/Cakefile 0000644 0001750 0001750 00000001317 11675043747 015161 0 ustar jonas jonas {spawn, exec} = require 'child_process'
fs = require 'fs'
sys = require 'util'
task 'coffee', ->
coffee = spawn './node_modules/coffee-script/bin/coffee', ['-o', 'lib', '-w', 'src']
coffee.stdout.on 'data', (data) -> console.log data.toString().trim()
task 'spec', 'Run jasmine specs', ->
spec = spawn './node_modules/jasmine-node/bin/jasmine-node', ['--coffee', './spec']
spec.stdout.on 'data', (data) ->
data = data.toString().replace(/^\s*|\s*$/g, '')
if data.match(/\u001b\[3\dm[\.F]\u001b\[0m/)
sys.print data
else
data = "\n#{data}" if data.match(/Finished/)
console.log data
spec.stderr.on 'data', (data) -> console.log data.toString().trim()
underscore.logger/src/ 0000755 0001750 0001750 00000000000 11675043747 014320 5 ustar jonas jonas underscore.logger/src/underscore.logger.coffee 0000644 0001750 0001750 00000010144 11675043747 021120 0 ustar jonas jonas class Logger
@FATAL: 0
@ERROR: 1
@WARN: 2
@INFO: 3
@DEBUG: 4
@TRACE: 5
@levels: ["FATAL", "ERROR", "WARN", "INFO", "DEBUG", "TRACE"]
@ANSI:
OFF: 0
BOLD: 1
ITALIC: 3
UNDERLINE: 4
BLINK: 5
INVERSE: 7
HIDDEN: 8
BLACK: 30
RED: 31
GREEN: 32
YELLOW: 33
BLUE: 34
MAGENTA: 35
CYAN: 36
WHITE: 37
BLACK_BG: 40
RED_BG: 41
GREEN_BG: 42
YELLOW_BG: 43
BLUE_BG: 44
MAGENTA_BG: 45
CYAN_BG: 46
WHITE_BG: 47
@colors: [@ANSI.MAGENTA, @ANSI.RED, @ANSI.YELLOW, @ANSI.GREEN, @ANSI.CYAN, @ANSI.BLUE]
constructor: (options = {}) ->
@level = options.level || Logger.DEBUG
@out = options.out if options.out
# set to false if you're in the browser
@colorized = if options.hasOwnProperty("colorized") then options.colorized else false
@colors = Logger.colors.concat()
out: (message) -> console.log(message)
colorize: ->
colors = Array.prototype.slice.call(arguments)
string = colors.shift()
result = ""
i = 0
while color = colors[i]
result += "\033[#{color}m"
i++
result += "#{string}\033[#{Logger.ANSI.OFF}m"
result
format: (date, level, message) ->
# Common Log Date Format: [10/Oct/2000:13:55:36 -0700]
"[#{date.toUTCString()}] #{Logger.levels[level]} #{message}"
_log: (level, args) ->
if level <= @level
i = 0
message = args[0].replace /%s/g, -> args[i++]
message = @format(new Date(), level, message)
message = @colorize(message, @colors[level]) if @colorized
@out message
log: ->
@info(arguments...)
fatal: ->
@_log(Logger.FATAL, arguments)
error: ->
@_log(Logger.ERROR, arguments)
warn: ->
@_log(Logger.WARN, arguments)
info: ->
@_log(Logger.INFO, arguments)
debug: ->
@_log(Logger.DEBUG, arguments)
trace: ->
@_log(Logger.TRACE, arguments)
group: ->
on: (event, callback) ->
switch event
when "message"
@
when "line"
@
when "frame"
@timer ?= new Logger.Timer()
@timer.on(event, callback)
when "bench"
@
@
toObject: ->
logger = @
log: -> logger.log(arguments...)
fatal: -> logger.fatal(arguments...)
error: -> logger.error(arguments...)
warn: -> logger.warn(arguments...)
info: -> logger.info(arguments...)
debug: -> logger.debug(arguments...)
trace: -> logger.trace(arguments...)
class @Timer
constructor: ->
@now = Date.now()
@time_last_frame = @now
@time_last_second = @now
@fps = 0
@fps_min = 1000 # set it high so it's calibrated to the lowest
@fps_max = 0
@ms = 0
@ms_min = 0
@ms_max = 0
@frames = 0
@handlers = []
on: (event, callback) ->
@handlers.push(callback)
@start()
start: ->
return @ if @timer
self = @
@timer = setInterval((-> self.update()), 1000 / 60)
@
stop: ->
clearInterval(@timer)
@timer = null
@
update: ->
@now = Date.now()
@ms = @now - @time_last_frame
@ms_min = Math.min(@ms_min, @ms)
@ms_max = Math.max(@ms_max, @ms)
@time_last_frame = @now
@frames += 1
if @now > (@time_last_second + 1000)
@fps = Math.round((@frames * 1000) / (@now - @time_last_second))
@fps_min = Math.min(@fps_min, @fps)
@fps_max = Math.max(@fps_max, @fps)
@time_last_second = @now
@frames = 0
for handler in @handlers
handler.apply(@)
if typeof module == 'undefined' || typeof window != 'undefined'
window["_console"] = new Logger(colorized: false)
else
module.exports = new Logger(colorized: true)