Logger.js
YAHOO.widget.Logger = {
loggerEnabled: true,
_firebugEnabled: true,
categories: ["info","warn","error","time","window"],
sources: ["global"],
_stack: [], // holds all log msgs
_startTime: new Date().getTime(), // static start timestamp
_lastTime: null // timestamp of last logged message
};
YAHOO.widget.Logger.categoryCreateEvent = new YAHOO.util.CustomEvent("categoryCreate", this, true);
YAHOO.widget.Logger.sourceCreateEvent = new YAHOO.util.CustomEvent("sourceCreate", this, true);
YAHOO.widget.Logger.newLogEvent = new YAHOO.util.CustomEvent("newLog", this, true);
YAHOO.widget.Logger.logResetEvent = new YAHOO.util.CustomEvent("logReset", this, true);
YAHOO.widget.Logger.log = function(sMsg, sCategory, sSource) {
if(this.loggerEnabled) {
if(!sCategory) {
sCategory = "info"; // default category
}
else if(this._isNewCategory(sCategory)) {
this._createNewCategory(sCategory);
}
var sClass = "global"; // default source
var sDetail = null;
if(sSource) {
var spaceIndex = sSource.indexOf(" ");
if(spaceIndex > 0) {
sClass = sSource.substring(0,spaceIndex);// substring until first space
sDetail = sSource.substring(spaceIndex,sSource.length);// the rest of the source
}
else {
sClass = sSource;
}
if(this._isNewSource(sClass)) {
this._createNewSource(sClass);
}
}
var timestamp = new Date();
var logEntry = {
time: timestamp,
category: sCategory,
source: sClass,
sourceDetail: sDetail,
msg: sMsg
};
this._stack.push(logEntry);
this.newLogEvent.fire(logEntry);
if(this._firebugEnabled) {
this._printToFirebug(logEntry);
}
return true;
}
else {
return false;
}
};
YAHOO.widget.Logger.reset = function() {
this._stack = [];
this._startTime = new Date().getTime();
this.loggerEnabled = true;
this.log(null, "Logger reset");
this.logResetEvent.fire();
};
YAHOO.widget.Logger.getStack = function() {
return this._stack;
};
YAHOO.widget.Logger.getStartTime = function() {
return this._startTime;
};
YAHOO.widget.Logger.disableFirebug = function() {
YAHOO.log("YAHOO.Logger output to Firebug has been disabled.");
this._firebugEnabled = false;
};
YAHOO.widget.Logger.enableFirebug = function() {
this._firebugEnabled = true;
YAHOO.log("YAHOO.Logger output to Firebug has been enabled.");
};
YAHOO.widget.Logger._createNewCategory = function(category) {
this.categories.push(category);
this.categoryCreateEvent.fire(category);
};
YAHOO.widget.Logger._isNewCategory = function(category) {
for(var i=0; i < this.categories.length; i++) {
if(category == this.categories[i]) {
return false;
}
}
return true;
};
YAHOO.widget.Logger._createNewSource = function(source) {
this.sources.push(source);
this.sourceCreateEvent.fire(source);
};
YAHOO.widget.Logger._isNewSource = function(source) {
if(source) {
for(var i=0; i < this.sources.length; i++) {
if(source == this.sources[i]) {
return false;
}
}
return true;
}
};
YAHOO.widget.Logger._printToFirebug = function(entry) {
if(window.console && console.log) {
var category = entry.category;
var label = entry.category.substring(0,4).toUpperCase();
var time = entry.time;
if (time.toLocaleTimeString) {
var localTime = time.toLocaleTimeString();
}
else {
localTime = time.toString();
}
var msecs = time.getTime();
var elapsedTime = (YAHOO.widget.Logger._lastTime) ?
(msecs - YAHOO.widget.Logger._lastTime) : 0;
YAHOO.widget.Logger._lastTime = msecs;
var output =
localTime + " (" +
elapsedTime + "ms): " +
entry.source + ": " +
entry.msg;
console.log(output);
}
};
/***************************************************************************
* Private event handlers
***************************************************************************/
/**
* Handles logging of messages due to window error events.
*
* @param {string} msg The error message
* @param {string} url URL of the error
* @param {string} line Line number of the error
* @private
*/
YAHOO.widget.Logger._onWindowError = function(msg,url,line) {
// Logger is not in scope of this event handler
try {
YAHOO.widget.Logger.log(msg+' ('+url+', line '+line+')', "window");
if(YAHOO.widget.Logger._origOnWindowError) {
YAHOO.widget.Logger._origOnWindowError();
}
}
catch(e) {
return false;
}
};
if(window.onerror) {
YAHOO.widget.Logger._origOnWindowError = window.onerror;
}
window.onerror = YAHOO.widget.Logger._onWindowError;
YAHOO.widget.Logger.log("Logger initialized");