]> git.r.bdr.sh - rbdr/cologne/blobdiff - lib/cobalt.js
Better formatting, and include extendLog
[rbdr/cologne] / lib / cobalt.js
index 45f0e26146342ccc99dd07e7d241b36a95aa309d..f3effcdcd76b4953b19e6247a85bdd702f20be83 100644 (file)
@@ -6,6 +6,7 @@
     var Ne = require('neon');
     Module = Ne.Module;
     Class = Ne.Class;
+    var Microtime = require('microtime');
   } else {
     Module = global.Module;
     Class = global.Class;
@@ -18,8 +19,6 @@
   // 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;
   }