Index: src/debug/debug.js
===================================================================
--- src/debug/debug.js	(revision 0)
+++ src/debug/debug.js	(revision 0)
@@ -0,0 +1,36 @@
+/* Debug needs to be loaded in front of jQuery.js */
+
+var jQueryDebug = {
+/**
+ * Returns a function for usage as jQuery.log
+ *
+ * @name jQueryDebug.getLogger
+ * @cat Debug
+ */
+	setLogger: function() {
+		// TODO: provide own log function, jQuery may not be setup correctly at this stage however.
+		jQuery.logByErr = jQueryDebug.logByErr;
+		if (window.console && console.log) {
+			if (console.firebug || console.getFirebugURL) {
+				jQuery.log = console.log;
+			} else {
+				// webkit or others, only one argument:
+				jQuery.log = function() { for (var i = 0; i < arguments.length; i++) console.log(arguments[i]); };
+			}
+		} else if (window.opera) {
+			jQuery.log = function() { for (var i = 0; i < arguments.length; i++) window.opera.postError(arguments[i]); };
+		}
+	},
+	logByErr: function(condition) {
+		if (!condition) return;
+		var i = (typeof condition == 'boolean') ? 1 : 0;
+		var errstr = jQueryDebug.errstr[arguments[i]] || "unknown err id";
+		for (i++;i < arguments.length; i++) {
+			errstr += ": "+arguments[i];
+		}
+		jQuery.log(errstr);
+	},
+	errstr: {
+		eventbind: "event.js should be loaded first"
+	}
+};
Index: src/debug/debug.js
===================================================================
--- src/debug/debug.js	(revision 0)
+++ src/debug/debug.js	(revision 0)
@@ -0,0 +1,36 @@
+/* Debug needs to be loaded in front of jQuery.js */
+
+var jQueryDebug = {
+/**
+ * Returns a function for usage as jQuery.log
+ *
+ * @name jQueryDebug.getLogger
+ * @cat Debug
+ */
+	setLogger: function() {
+		// TODO: provide own log function, jQuery may not be setup correctly at this stage however.
+		jQuery.logByErr = jQueryDebug.logByErr;
+		if (window.console && console.log) {
+			if (console.firebug || console.getFirebugURL) {
+				jQuery.log = console.log;
+			} else {
+				// webkit or others, only one argument:
+				jQuery.log = function() { for (var i = 0; i < arguments.length; i++) console.log(arguments[i]); };
+			}
+		} else if (window.opera) {
+			jQuery.log = function() { for (var i = 0; i < arguments.length; i++) window.opera.postError(arguments[i]); };
+		}
+	},
+	logByErr: function(condition) {
+		if (!condition) return;
+		var i = (typeof condition == 'boolean') ? 1 : 0;
+		var errstr = jQueryDebug.errstr[arguments[i]] || "unknown err id";
+		for (i++;i < arguments.length; i++) {
+			errstr += ": "+arguments[i];
+		}
+		jQuery.log(errstr);
+	},
+	errstr: {
+		eventbind: "event.js should be loaded first"
+	}
+};
Index: src/event/event.js
===================================================================
--- src/event/event.js	(revision 2645)
+++ src/event/event.js	(working copy)
@@ -931,7 +931,7 @@
 	jQuery.each( ("blur,focus,load,resize,scroll,unload,click,dblclick," +
 		"mousedown,mouseup,mousemove,mouseover,mouseout,change,select," + 
 		"submit,keydown,keypress,keyup,error").split(","), function(i,o){
-		
+		jQuery.logByErr( jQuery.fn[o] != undefined, "eventbind", o);
 		// Handle event binding
 		jQuery.fn[o] = function(f){
 			return f ? this.bind(o, f) : this.trigger(o);
Index: src/jquery/jquery.js
===================================================================
--- src/jquery/jquery.js	(revision 2645)
+++ src/jquery/jquery.js	(working copy)
@@ -37,7 +37,22 @@
 // Map the jQuery namespace to the '$' one
 var $ = jQuery;
 
+
+
 /**
+ * Logs to a loaded or native javascript console when jQuery debug.js is loaded
+ *
+ * @example $.log('test');
+ * @desc Prints 'test' in a loaded/native javascript console when debug.js is loaded, otherwise silent
+ *
+ * @name $.log
+ * @param String(s)
+ * @cat Core
+ */
+jQuery.log = jQuery.logByErr = function(){};
+if ( typeof jQueryDebug != "undefined" ) jQueryDebug.setLogger();
+
+/**
  * This function accepts a string containing a CSS or
  * basic XPath selector which is then used to match a set of elements.
  *
