YUI errorLogging

As we have decided to start using the YUI javascript framework, I rewrote the logging tool I did for jQuery.

I understand there’s already a logging tool for YUI, but if you don’t want to initiate the logger, here’s a quick fix:

YAHOO.namespace('IPC');
 
(function(Y) {
 
	var Log = {
		debug : function(message) {
			if (window.console && window.console.firebug) {
				console.debug(message);
			} else {
				alert("Debug Message: " + message);
			}
		},
 
		info : function(message) {
			if (window.console && window.console.firebug) {
				console.info(message);
			} else {
				alert("Info: " + message);
			}
		},
 
		warn : function(message) {
			if (window.console && window.console.firebug) {
				console.warn(message);
			} else {
				alert("WARNING: " + message);
			}
		},
 
		error : function(e) {
			if (window.console && window.console.firebug) {
				switch (typeof e) {
					case "boolean":
					case "number":
					case "string":
						console.error(e);
						break;
					case "object":
						console.group(e.name);
						console.error(e.message);
						if (e.object) {
							console.dir(e.object);
						}
						if (e.xml) {
							console.dirxml(e.xml);
						}
						console.trace();
						console.groupEnd();
						break;
					default:
						Y.IPC.Log.warn("Problem logging error. Unknown error type: '" + typeof e + "'");
						console.error(e);
				}
			} else {
				var message = "FATAL ERROR!: ";
				switch (typeof e) {
					case "boolean":
					case "number":
					case "string":
						alert(message + e);
						break;
					case "object":
						alert(message + e.name);
						break;
					default:
						Y.IPC.Log.warn("Problem logging error. Unknown error type: '" + typeof e + "'");
						alert(message + e);
				}
			}
		},
 
		throwError : function(info) {
		    var error = new Error(info.message);
 
		    if (info.name) {
				error.name = info.name;
		    } else {
				error.name = 'Error';
		    }
 
		    if (info.object) {
				error.object = info.object;
		    }
 
		    if (info.xml) {
				error.xml = info.xml;
		    }
 
		    throw error;
		}
	}
 
	Y.IPC.Log = Log;
})(YAHOO);

You’d use it in the same way as before, either a separate method in your object, use one of the logging methods directly, or use the throw method directly.

Leave a Reply

You must be logged in to post a comment.