Console integration: get number of errors/warnings thrown? Console integration: get number of errors/warnings thrown? google-chrome google-chrome

Console integration: get number of errors/warnings thrown?


As noted in this answer, it's generally not a good idea to change the behavior of native objects/methods. However, the following code should get you what you need in a fairly innocuous manner:

// Add this IIFE to your codebase:(() => {	// Get all of the property names of the console:	const methodsToTrack = Object.keys(window.console);	// Create an object to collect total usage tallies in:	const usageRegistry = {};	for (let i = 0, j = methodsToTrack.length; i < j; i++) {		let methodName = methodsToTrack[i];		// If the property is not a method, don't touch it:		if(typeof window.console[methodName] !== 'function') {			continue;		}		// Cache the original console method here:		let consoleMethod = window.console[methodName];		// Overwrite console's method to increment the counter:		window.console[methodName] = function () {			// Defining registry properties here, so the registry only contains values for methods that were accessed:			usageRegistry[methodName] = usageRegistry[methodName] || 0;			// Execute the original method's behavior, capturing the returned value (if any) in a var, to return it at the end:			const returnedValue = consoleMethod(...arguments);			// Increment the usage registry for the executed method:			usageRegistry[methodName]++;			// Return the value the console's method would have returned, so the new method has the same signature as the old.			return returnedValue;		};	}	// Define a funciton to output the totals to a console log, then clean up after itself:	window.showConsoleTallies = function () {		window.console.log(usageRegistry);		usageRegistry['log']--;	}})();// Examples:showConsoleTallies();console.log('log 1');console.error('error 1');console.log('log 2');console.warn('warn 1');console.error('error 2');console.log('log 3');showConsoleTallies();

PS: That's the ECMA6 version, but feel free to run it through Babel if you'd like it to be compiled for use in older browsers.