|
/*
|
|
*
|
|
* Licensed to the Apache Software Foundation (ASF) under one
|
|
* or more contributor license agreements. See the NOTICE file
|
|
* distributed with this work for additional information
|
|
* regarding copyright ownership. The ASF licenses this file
|
|
* to you under the Apache License, Version 2.0 (the
|
|
* "License"); you may not use this file except in compliance
|
|
* with the License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing,
|
|
* software distributed under the License is distributed on an
|
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
* KIND, either express or implied. See the License for the
|
|
* specific language governing permissions and limitations
|
|
* under the License.
|
|
*
|
|
*/
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
var logger = require("./logger");
|
|
|
|
//------------------------------------------------------------------------------
|
|
// object that we're exporting
|
|
//------------------------------------------------------------------------------
|
|
var console = module.exports;
|
|
|
|
//------------------------------------------------------------------------------
|
|
// copy of the original console object
|
|
//------------------------------------------------------------------------------
|
|
var WinConsole = window.console;
|
|
|
|
//------------------------------------------------------------------------------
|
|
// whether to use the logger
|
|
//------------------------------------------------------------------------------
|
|
var UseLogger = false;
|
|
|
|
//------------------------------------------------------------------------------
|
|
// Timers
|
|
//------------------------------------------------------------------------------
|
|
var Timers = {};
|
|
|
|
//------------------------------------------------------------------------------
|
|
// used for unimplemented methods
|
|
//------------------------------------------------------------------------------
|
|
function noop() {}
|
|
|
|
//------------------------------------------------------------------------------
|
|
// used for unimplemented methods
|
|
//------------------------------------------------------------------------------
|
|
console.useLogger = function (value) {
|
|
if (arguments.length) UseLogger = !!value;
|
|
|
|
if (UseLogger) {
|
|
if (logger.useConsole()) {
|
|
throw new Error("console and logger are too intertwingly");
|
|
}
|
|
}
|
|
|
|
return UseLogger;
|
|
};
|
|
|
|
//------------------------------------------------------------------------------
|
|
console.log = function() {
|
|
if (logger.useConsole()) return;
|
|
logger.log.apply(logger, [].slice.call(arguments));
|
|
};
|
|
|
|
//------------------------------------------------------------------------------
|
|
console.error = function() {
|
|
if (logger.useConsole()) return;
|
|
logger.error.apply(logger, [].slice.call(arguments));
|
|
};
|
|
|
|
//------------------------------------------------------------------------------
|
|
console.warn = function() {
|
|
if (logger.useConsole()) return;
|
|
logger.warn.apply(logger, [].slice.call(arguments));
|
|
};
|
|
|
|
//------------------------------------------------------------------------------
|
|
console.info = function() {
|
|
if (logger.useConsole()) return;
|
|
logger.info.apply(logger, [].slice.call(arguments));
|
|
};
|
|
|
|
//------------------------------------------------------------------------------
|
|
console.debug = function() {
|
|
if (logger.useConsole()) return;
|
|
logger.debug.apply(logger, [].slice.call(arguments));
|
|
};
|
|
|
|
//------------------------------------------------------------------------------
|
|
console.assert = function(expression) {
|
|
if (expression) return;
|
|
|
|
var message = logger.format.apply(logger.format, [].slice.call(arguments, 1));
|
|
console.log("ASSERT: " + message);
|
|
};
|
|
|
|
//------------------------------------------------------------------------------
|
|
console.clear = function() {};
|
|
|
|
//------------------------------------------------------------------------------
|
|
console.dir = function(object) {
|
|
console.log("%o", object);
|
|
};
|
|
|
|
//------------------------------------------------------------------------------
|
|
console.dirxml = function(node) {
|
|
console.log(node.innerHTML);
|
|
};
|
|
|
|
//------------------------------------------------------------------------------
|
|
console.trace = noop;
|
|
|
|
//------------------------------------------------------------------------------
|
|
console.group = console.log;
|
|
|
|
//------------------------------------------------------------------------------
|
|
console.groupCollapsed = console.log;
|
|
|
|
//------------------------------------------------------------------------------
|
|
console.groupEnd = noop;
|
|
|
|
//------------------------------------------------------------------------------
|
|
console.time = function(name) {
|
|
Timers[name] = new Date().valueOf();
|
|
};
|
|
|
|
//------------------------------------------------------------------------------
|
|
console.timeEnd = function(name) {
|
|
var timeStart = Timers[name];
|
|
if (!timeStart) {
|
|
console.warn("unknown timer: " + name);
|
|
return;
|
|
}
|
|
|
|
var timeElapsed = new Date().valueOf() - timeStart;
|
|
console.log(name + ": " + timeElapsed + "ms");
|
|
};
|
|
|
|
//------------------------------------------------------------------------------
|
|
console.timeStamp = noop;
|
|
|
|
//------------------------------------------------------------------------------
|
|
console.profile = noop;
|
|
|
|
//------------------------------------------------------------------------------
|
|
console.profileEnd = noop;
|
|
|
|
//------------------------------------------------------------------------------
|
|
console.count = noop;
|
|
|
|
//------------------------------------------------------------------------------
|
|
console.exception = console.log;
|
|
|
|
//------------------------------------------------------------------------------
|
|
console.table = function(data, columns) {
|
|
console.log("%o", data);
|
|
};
|
|
|
|
//------------------------------------------------------------------------------
|
|
// return a new function that calls both functions passed as args
|
|
//------------------------------------------------------------------------------
|
|
function wrappedOrigCall(orgFunc, newFunc) {
|
|
return function() {
|
|
var args = [].slice.call(arguments);
|
|
try { orgFunc.apply(WinConsole, args); } catch (e) {}
|
|
try { newFunc.apply(console, args); } catch (e) {}
|
|
};
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
// For every function that exists in the original console object, that
|
|
// also exists in the new console object, wrap the new console method
|
|
// with one that calls both
|
|
//------------------------------------------------------------------------------
|
|
for (var key in console) {
|
|
if (typeof WinConsole[key] == "function") {
|
|
console[key] = wrappedOrigCall(WinConsole[key], console[key]);
|
|
}
|
|
}
|