X-Git-Url: https://git.r.bdr.sh/rbdr/cologne/blobdiff_plain/4ee070b17b6c3bf561f77b6f56ee306d94f775b3..54a5290bbcae03d129dd21401a4dae98d0aef775:/lib/cobalt.js diff --git a/lib/cobalt.js b/lib/cobalt.js index c832c7f..b5dd94c 100644 --- a/lib/cobalt.js +++ b/lib/cobalt.js @@ -1,256 +1,320 @@ -(function (global) { - var Module, Class; - - // Load up dependencies - if (typeof require === 'function') { - var Ne = require('neon'); - Module = Ne.Module; - Class = Ne.Class; - } else { - Module = global.Module; - Class = global.Class; +// Load up dependencies +if (typeof require === 'function') { + require('neon'); + var colors = require('colors'); + var Microtime = require('microtime'); +} + +Cobalt = Module("Cobalt"); +Module(Cobalt, 'Logger')({}); +Module(Cobalt, 'Formatter')({}); + +// Load up loggers + formatters +if (typeof require === 'function') { + // Formatters + require('./formatters/token.js'); + require('./formatters/simple.js'); + + // Loggers + require('./loggers/console.js'); + require('./loggers/socket.js'); + require('./loggers/file.js'); +} + +Cobalt.now = function () { + if (typeof performance !== 'undefined' && performance.timing) { + return performance.timing.navigationStart + performance.now(); } - var Cobalt = {}; - Module(Cobalt, 'Logger')({}); - Module(Cobalt, 'Formatter')({}); - - // Load up loggers + formatters - if (typeof require === 'function') { - // Formatters - Cobalt.Formatter.Simple = require('./formatters/simple.js').Simple; - Cobalt.Formatter.Ansi = require('./formatters/ansi.js').Ansi; - Cobalt.Formatter.Token = require('./formatters/token.js').Token; - - // Loggers - Cobalt.Logger.JsConsole = require('./loggers/console.js').JsConsole; - Cobalt.Logger.Socket = require('./loggers/socket.js').Socket; + if (typeof Microtime !== 'undefined') { + return Microtime.nowDouble() * 1000; } - Cobalt.Console = Class(Cobalt, 'Console')({ - prototype : { - from : "Generic Cobalt Logger", - version : "0.1.0", - currentIndent : 0, - indentSize : 2, - loggers : [], - separatorLength : 120, - currentColor : "black", - - // Initialize instance of cobalt console - // and extend configuration. - init : function (config) { - var co = this, - property; - - if (config) { - for (property in config) { - co[property] = config[property]; - } - } - }, - - addLogger : function (logger) { - this.loggers.push(logger); - }, - - removeLogger : function (logger) { - var index; - - index = this.loggers.indexOf(logger); - this.loggers.splice(index, 1); - }, - - // Builds a Cobalt Log Object - buildLog : function (item, level) { - var co = this; - - if (!item._cobaltLog) { - if (typeof item !== "object") { - item = { _cobaltLog : true, message : item.toString() }; - } - - item._from = co.from; - item._level = item._level || level || 7; - item._levelString = co._levelString(item._level); - item._version = co.version; - item._timestamp = co.now(); - item._indentLevel = co.currentIndent; - item._color = co.currentColor; - } + return Date.now(); +} - return item; - }, - - buildSeparator : function (type) { - var co = this; - return { - _cobaltLog : true, - _separator : true, - _version : co.version, - _timestamp : co.now(), - _separatorType : type, - _indentLevel : co.currentIndent, - _color : co.currentColor +// Stringify with circular dereference. +Cobalt.stringify = function (object) { + var cache = [], stringified; + stringified = JSON.stringify(object, function (key, value) { + if (typeof value === 'object' && value !== null) { + if (cache.indexOf(value) !== -1) { + return "[Circular]"; + } + cache.push(value); + } + return value; + }); + cache = null; + + return stringified; +} + +Class(Cobalt, 'Console')({ + prototype : { + from : "Generic Cobalt Logger", + version : "0.1.0", + currentIndent : 0, + indentSize : 2, + loggers : [], + separatorLength : 120, + currentColor : "black", + + // Initialize instance of cobalt console + // and extend configuration. + init : function (config) { + var co = this, + property; + + if (config) { + for (property in config) { + co[property] = config[property]; } - }, + } + }, + + addLogger : function (logger) { + this.loggers.push(logger); + }, + + removeLogger : function (logger) { + var index; + + index = this.loggers.indexOf(logger); + this.loggers.splice(index, 1); + }, + + // Builds a Cobalt Log Object + buildLog : function (item, level) { + var co = this, oldItem, logObject = {}; + + if (typeof item === "undefined" || item === null || !item._cobaltLog) { + logObject.message = item; + logObject._cobaltLog = true; + logObject._from = co.from; + logObject._level = level || 6; + logObject._levelString = co._levelString(logObject._level); + logObject._version = co.version; + logObject._timestamp = co.now(); + logObject._indentLevel = co.currentIndent; + logObject._color = co.currentColor; + logObject._separator = false; + return logObject; + } + + if (item._cobaltLog) { + item._level = level || item._level || 6; + item._levelString = co._levelString(item._level); + } - _log : function (severity) { - var co = this, - logString, - i, j; + return item; + }, - for (i = 1; i < arguments.length; i++) { - logObject = co.buildLog(arguments[i], severity); + extendLog : function (extendingObject) { + var co = this, logObject, + property; - for (j = 0; j < co.loggers.length; j++) { - co.loggers[j].log(logObject); - } + logObject = co.buildLog(undefined, 6); + extendingObject = extendingObject || {}; + + for (property in extendingObject) { + if (extendingObject.hasOwnProperty(property)) { + logObject[property] = extendingObject[property]; } - }, + } - log : function () { - this._log.apply(this, [7].concat([].splice.call(arguments, 0))); - }, + return logObject; + }, + + buildSeparator : function (type) { + var co = this; + return { + _cobaltLog : true, + _separator : true, + _version : co.version, + _timestamp : co.now(), + _separatorType : type, + _indentLevel : co.currentIndent, + _color : co.currentColor + } + }, + + _log : function (severity) { + var co = this, + logString, + logObjectArray = [], + i, j; + + for (i = 1; i < arguments.length; i++) { + if (typeof arguments[i] === 'undefined') { + logObjectArray.push(co.buildLog("undefined", severity)); + } else if (arguments[i] === null) { + logObjectArray.push(co.buildLog("null", severity)); + } else { + logObjectArray.push(co.buildLog(arguments[i], severity)); + } + } - info : function () { - this._log.apply(this, [6].concat([].splice.call(arguments, 0))); - }, + for (j = 0; j < co.loggers.length; j++) { + co.loggers[j].log.apply(co.loggers[j], logObjectArray); + } + }, - notice : function () { - this._log.apply(this, [5].concat([].splice.call(arguments, 0))); - }, + log : function () { + this._log.apply(this, [6].concat(Array.prototype.slice.call(arguments))); + }, - warn : function () { - this._log.apply(this, [4].concat([].splice.call(arguments, 0))); - }, + debug : function () { + this._log.apply(this, [7].concat(Array.prototype.slice.call(arguments))); + }, - error : function () { - this._log.apply(this, [3].concat([].splice.call(arguments, 0))); - }, + info : function () { + this._log.apply(this, [6].concat(Array.prototype.slice.call(arguments))); + }, - separator : function (type) { - var co = this; + notice : function () { + this._log.apply(this, [5].concat(Array.prototype.slice.call(arguments))); + }, - co._log(7, co.buildSeparator(type)); - }, + warn : function () { + this._log.apply(this, [4].concat(Array.prototype.slice.call(arguments))); + }, - space : function (lines) { - var co = this, - i; + error : function () { + this._log.apply(this, [3].concat(Array.prototype.slice.call(arguments))); + }, - if (typeof lines === "undefined") { - lines = 1; - } + dir : function () { + }, - for (i = 0; i < lines; i++) { - co.log(' '); - } + time : function () { + }, - return co; - }, + timeEnd : function () { + }, - indent : function (callback) { - var co = this; + groupCollapsed : function () { + }, - if (typeof callback === "function") { - co.currentIndent = co.currentIndent + co.indentSize; - callback(); - co.currentIndent = co.currentIndent - co.indentSize; - } else { - co.currentIndent = co.currentIndent + co.indentSize; - } + groupEnd : function () { + }, - return co; - }, + separator : function (type) { + var co = this; - outdent : function (callback) { - var co = this; + co._log(7, co.buildSeparator(type)); + }, - if (typeof callback === "function") { - co.currentIndent = co.currentIndent - co.indentSize; - if (co.currentIndent < 0) { - co.currentIndent = 0; - } + space : function (lines) { + var co = this, + i; - callback(); + if (typeof lines === "undefined") { + lines = 1; + } - co.currentIndent = co.currentIndent + co.indentSize; - } else { - co.currentIndent = co.currentIndent - co.indentSize; - if (co.currentIndent < 0) { - co.currentIndent = 0; - } - } + for (i = 0; i < lines; i++) { + co.log(' '); + } - return co; - }, + return co; + }, - color : function (color, callback) { - var co = this, - oldColor = co.currentColor; + indent : function (callback) { + var co = this; - if (typeof callback === "function") { - co.currentColor = color; - callback(); - co.currentColor = oldColor; - } else { - co.currentColor = color; - } + if (typeof callback === "function") { + co.currentIndent = co.currentIndent + co.indentSize; + callback(); + co.currentIndent = co.currentIndent - co.indentSize; + } else { + co.currentIndent = co.currentIndent + co.indentSize; + } - return co; - }, + return co; + }, - // Returns the current time in microseconds. - now : function () { - if (typeof performance !== 'undefined') { - return performance.timing.navigationStart + performance.now(); - } + outdent : function (callback) { + var co = this; - if (typeof process !== 'undefined') { - return process.hrtime(); + if (typeof callback === "function") { + co.currentIndent = co.currentIndent - co.indentSize; + if (co.currentIndent < 0) { + co.currentIndent = 0; } - return Date.now(); - }, - - _levelString : function (level) { - switch(level) { - case 0: - return "PANIC"; - break; - case 1: - return "ALERT" - break; - case 2: - return "CRIT" - break; - case 3: - return "ERROR" - break; - case 4: - return "WARN" - break; - case 5: - return "NOTICE" - break; - case 6: - return "INFO" - break; - case 7: - return "DEBUG" - break; + callback(); + + co.currentIndent = co.currentIndent + co.indentSize; + } else { + co.currentIndent = co.currentIndent - co.indentSize; + if (co.currentIndent < 0) { + co.currentIndent = 0; } } - } - }); - if (typeof require === 'function') { - global.Formatter = Cobalt.Formatter; - global.Logger = Cobalt.Logger; - global.Console = Cobalt.Console; - } else { - global.Cobalt = Cobalt; + return co; + }, + + color : function (color, callback) { + var co = this, + oldColor = co.currentColor; + + if (typeof callback === "function") { + co.currentColor = color; + callback(); + co.currentColor = oldColor; + } else { + co.currentColor = color; + } + + return co; + }, + + // Returns the current time in microseconds. + now : function () { + if (typeof performance !== 'undefined' && performance.timing) { + return performance.timing.navigationStart + performance.now(); + } + + if (typeof Microtime !== 'undefined') { + return Microtime.nowDouble() * 1000; + } + + return Date.now(); + }, + + _levelString : function (level) { + switch(level) { + case 0: + return "PANIC"; + break; + case 1: + return "ALERT" + break; + case 2: + return "CRIT" + break; + case 3: + return "ERROR" + break; + case 4: + return "WARN" + break; + case 5: + return "NOTICE" + break; + case 6: + return "INFO" + break; + case 7: + return "DEBUG" + break; + } + } } +}); -}(typeof window !== 'undefined' ? window : (typeof module.exports !== 'undefined' ? module.exports : self))); +if (Cobalt.Console.__objectSpy) { + Cobalt.Console.__objectSpy.destroy(); +}