var Ne = require('neon');
Module = Ne.Module;
Class = Ne.Class;
+ var Microtime = require('microtime');
} else {
Module = global.Module;
Class = global.Class;
// 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.Socket = require('./loggers/socket.js').Socket;
}
+ Cobalt.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();
+ }
+
+ // 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;
+ }
+
Cobalt.Console = Class(Cobalt, 'Console')({
prototype : {
from : "Generic Cobalt Logger",
// Builds a Cobalt Log Object
buildLog : function (item, level) {
- var co = this;
+ 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) {
- if (typeof item !== "object") {
- item = { _cobaltLog : true, message : item.toString() };
- }
+ return item;
+ },
- 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;
+ extendLog : function (extendingObject) {
+ var co = this, logObject,
+ property;
+
+ logObject = co.buildLog(undefined, 6);
+ extendingObject = extendingObject || {};
+
+ for (property in extendingObject) {
+ if (extendingObject.hasOwnProperty(property)) {
+ logObject[property] = extendingObject[property];
+ }
}
- return item;
+ return logObject;
},
buildSeparator : function (type) {
_version : co.version,
_timestamp : co.now(),
_separatorType : type,
- _indentLevel : co.currentIndent
+ _indentLevel : co.currentIndent,
+ _color : co.currentColor
}
},
_log : function (severity) {
var co = this,
logString,
+ logObjectArray = [],
i, j;
for (i = 1; i < arguments.length; i++) {
- logObject = co.buildLog(arguments[i], severity);
-
- for (j = 0; j < co.loggers.length; j++) {
- co.loggers[j].log(logObject);
+ if (typeof arguments[i] === 'undefined') {
+ logObjectArray.push(co.buildLog("undefined", severity));
+ } else {
+ logObjectArray.push(co.buildLog(arguments[i], severity));
}
}
+
+ for (j = 0; j < co.loggers.length; j++) {
+ co.loggers[j].log.apply(co.loggers[j], logObjectArray);
+ }
},
log : function () {
// Returns the current time in microseconds.
now : function () {
- if (typeof performance !== 'undefined') {
+ if (typeof performance !== 'undefined' && performance.timing) {
return performance.timing.navigationStart + performance.now();
}
- if (typeof process !== 'undefined') {
- return process.hrtime();
+ if (typeof Microtime !== 'undefined') {
+ return Microtime.nowDouble() * 1000;
}
return Date.now();
}
});
+ if (Cobalt.Console.__objectSpy) {
+ Cobalt.Console.__objectSpy.destroy();
+ }
+
if (typeof require === 'function') {
global.Formatter = Cobalt.Formatter;
global.Logger = Cobalt.Logger;
global.Console = Cobalt.Console;
+ global.now = Cobalt.now;
+ global.stringify = Cobalt.stringify;
} else {
global.Cobalt = Cobalt;
}