Skip to content

Instantly share code, notes, and snippets.

@Kein1945
Last active December 25, 2015 18:19
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Kein1945/d499c5c9027f719cc9ae to your computer and use it in GitHub Desktop.
Save Kein1945/d499c5c9027f719cc9ae to your computer and use it in GitHub Desktop.
Simple function that allow see events flow in dev console with stack trace and data.
var bind_logging = (function(strategies, loggers) {
var log_always = '#bind_logging' == document.location.hash;
var canWeLogThis = function(eventflow) {
return _.every(['on', 'off', 'trigger'], function(n){ return eventflow && _.isFunction(eventflow[n]) });
},
canWeLogHere = function() {
return _.every(['groupCollapsed', 'groupEnd', 'log', 'trace'], function(n){ return console && _.isFunction(console[n]) });
},
getLogger = function(ctx, args) {
for(var i = 0; i < strategies.length; i++) {
var logger = strategies[i](ctx, args, loggers);
if(logger) return logger;
}
return function(ctx, arguments){ console.log("Uncatched event flow: "+args[0], ctx, args.slice(1)) };
},
shouldWeLogNow = function() {
return log_always || '#bind_logging' == document.location.hash;
};
this.bind_logging = function(eventflow, name) {
if(!canWeLogHere()) return false;
if(canWeLogThis(eventflow)) {
eventflow.on('all', function() {
if(!shouldWeLogNow()) return;
var logger = getLogger(this, _.toArray(arguments))
, args = _.toArray(arguments);
args.unshift(name);
logger.apply(this, args);
})
return true;
} else {
throw new Error("Can't observer for " + name);
console.log(eventflow);
}
return false;
};
return this.bind_logging;
})([
function(ctx, args, loggers) {
return _.isArray(ctx.models) && loggers.collection;
},
function(ctx, args, loggers) {
return _.isFunction(ctx.isValid) && loggers.model;
},
function(ctx, args, loggers) {
return loggers.defaultLogger;
}
], {
collection: function(name, event_name, model, collection) {
if('change' != event_name){
console.groupCollapsed('[] %s : %s', name, event_name);
console.log("Arguments: ", _.toArray(arguments).slice(2));
console.trace();
console.groupEnd();
}
},
model: function(name, event_name, model, value) {
if('change' != event_name){
if('change:' == event_name.substr(0, 7)){
console.groupCollapsed('$ %s : %s = %s', name, event_name.substr(7), value);
} else {
console.groupCollapsed('$ %s : %s', name, event_name);
console.log("Arguments: ", _.toArray(arguments).slice(2));
}
console.trace();
console.groupEnd();
}
},
defaultLogger: function(name, event_name) {
console.groupCollapsed('%s : %s', name, event_name);
console.log("Arguments: ", _.toArray(arguments).slice(2));
console.trace();
console.groupEnd();
}
});
@Kein1945
Copy link
Author

Usage:

bind_logging(user_model, "Current user")

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment