variable log ejemplo chrome javascript debugging

javascript - ejemplo - Anular console.log(); para la producción



console.log jquery (13)

Soy bastante nuevo en el desarrollo de Javascript, por lo que esta podría ser una verdadera pregunta para novatos.

Tengo una aplicación sencha-touch repleta de console.log(); con fines de depuración.

He estado chirpy haciendo todo mi tiempo de compilación combinando. app.debug.js un app.debug.js para la depuración, así como un app.min.js para la producción

Ahora podría revisar todos mis archivos de código buscando console.log(); y eliminarlo manualmente cuando esté listo para ir a producción, pero me pregunto si hay una manera de anular el método.

Básicamente, cada vez que console.log(); método se llama, NO HACER NADA.

De esa forma, puedo poner el archivo de código de anulación en mi configuración de producción, y NO en mi configuración de depuración.

es posible?


Aquí esta lo que hice

var domainNames =["fiddle.jshell.net"]; // we replace this by our production domain. var logger = { force:false, original:null, log:function(obj) { var hostName = window.location.hostname; if(domainNames.indexOf(hostName) > -1) { if(window.myLogger.force === true) { window.myLogger.original.apply(this,arguments); } }else { window.myLogger.original.apply(this,arguments); } }, forceLogging:function(force){ window.myLogger.force = force; }, original:function(){ return window.myLogger.original; }, init:function(){ window.myLogger.original = console.log; console.log = window.myLogger.log; } } window.myLogger = logger; console.log("this should print like normal"); window.myLogger.init(); console.log("this should not print"); window.myLogger.forceLogging(true); console.log("this should print now");

También publicado sobre esto aquí. http://bhavinsurela.com/naive-way-of-overriding-console-log/


Después de leer muchas publicaciones, hice mi propia solución de la siguiente manera:

GUIÓN:

function extendConsole() { "use strict"; try { var disabledConsoles = {}; console.enable = function (level, enabled) { // Prevent errors in browsers without console[level] if (window.console === ''undefined'' || !window.console || window.console === null) { window.console = {}; } if (window.console[level] === ''undefined'' || !window.console[level] || window.console[level] == null) { window.console[level] = function() {}; } if (enabled) { if (disabledConsoles[level]) { window.console[level] = disabledConsoles[level]; } console.info("console." + level + "() was enabled."); } else { disabledConsoles[level] = window.console[level]; window.console[level] = function () { }; console.info("console." + level + "() was disabled."); } }; } catch (exception) { console.error("extendConsole() threw an exception."); console.debug(exception); } }

USO:

extendConsole(); console.enable("debug", window.debugMode);

EJEMPLO:

http://jsfiddle.net/rodolphobrock/2rzxb5bo/10/


Esto anulará la función console.log cuando la url no contenga localhost. Puede reemplazar el host local con su propia configuración de desarrollo.

// overriding console.log in production if(window.location.host.indexOf(''localhost:9000'') < 0) { console.log = function(){}; }


No hay ninguna razón para dejar toda esa consola.log en todo su proyecto en entorno prod ... Si desea hacerlo de la manera correcta, agregue UglifyJS2 a su proceso de implementación usando la opción "drop_console".


O si solo quiere redefinir el comportamiento de la consola (para agregar registros, por ejemplo) puede hacer algo como eso:

// define a new console var console=(function(oldCons){ return { log: function(text){ oldCons.log(text); // Your code }, info: function (text) { oldCons.info(text); // Your code }, warn: function (text) { oldCons.warn(text); // Your code }, error: function (text) { oldCons.error(text); // Your code } }; }(window.console)); //Then redefine the old console window.console = console;


Pon esto en la parte superior del archivo:

var console = {}; console.log = function(){};

Para algunos navegadores y minificadores, puede necesitar aplicar esto en el objeto ventana.

window.console = console;


Puede consultar UglifyJS : http://jstarrdewar.com/blog/2013/02/28/use-uglify-to-automatically-strip-debug-messages-from-your-javascript/ , https://github.com/mishoo/UglifyJS No lo he probado todavía.

Citando

if (typeof DEBUG === ''undefined'') DEBUG = true; // will be removed function doSomethingCool() { DEBUG && console.log("something cool just happened"); // will be removed }

... La línea de mensaje de registro será eliminada por el removedor de código muerto de Uglify (ya que borrará cualquier condición que siempre se evaluará como falsa). Entonces ese primer condicional. Pero cuando está probando como código sin comprimir, DEBUG comenzará indefinido, el primer condicional lo establecerá en verdadero y todos sus mensajes console.log () funcionarán.


Sería muy útil poder alternar el inicio de sesión en la compilación de producción. El código siguiente apaga el registrador de forma predeterminada.

Cuando necesito ver los registros, simplemente debug(true) en la consola.

var consoleHolder = console; function debug(bool){ if(!bool){ consoleHolder = console; console = {}; Object.keys(consoleHolder).forEach(function(key){ console[key] = function(){}; }) }else{ console = consoleHolder; } } debug(false);

Para ser minucioso, esto anula TODOS los métodos de la consola, no solo console.log .


Solo recuerde que con este método cada llamada a console.log seguirá haciendo una llamada a una función (vacía) que causa sobrecarga, si hay 100 comandos console.log, todavía está haciendo 100 llamadas a una función en blanco.

No estoy seguro de la cantidad de sobrecarga que esto podría causar, pero habrá algunos, sería preferible tener una bandera para activar la depuración y luego usar algo como:

var debug=true; if (debug) console.log(''blah'')


También podría usar expresiones regulares para eliminar todas las llamadas a console.log () en su código si ya no son necesarias. Cualquier IDE decente le permitirá buscar y reemplazar estos en todo un proyecto, y le permitirá obtener una vista previa de las coincidencias antes de comprometer el cambio.

/s*console/.log/([^)]+/);


Uso algo similar a lo que hace posit labs. Guarde la consola en un cierre y tendrá todo en una función portátil.

var GlobalDebug = (function () { var savedConsole = console; return function(debugOn,suppressAll){ var suppress = suppressAll || false; if (debugOn === false) { console = {}; console.log = function () { }; if(suppress) { console.info = function () { }; console.warn = function () { }; console.error = function () { }; } else { console.info = savedConsole.info; console.warn = savedConsole.warn; console.error = savedConsole.error; } } else { console = savedConsole; } } })();

Simplemente haga globalDebug (falso) para alternar los mensajes de registro o globalDebug (falso, verdadero) para eliminar todos los mensajes de la consola.


Yo recomendaría usar: https://github.com/sunnykgupta/jsLogger

caracteristicas:

  1. Con seguridad anula el console.log.
  2. Se cuida si la consola no está disponible (oh sí, también debes tener en cuenta eso).
  3. Almacena todos los registros (incluso si están suprimidos) para su recuperación posterior.
  4. Maneja las principales funciones de la consola como log , warn , error , info .

Está abierto a modificaciones y se actualizará siempre que surjan nuevas sugerencias.

Descargo de responsabilidad: soy el autor del complemento.


console.log = function(){};

Anularlo como cualquier otra cosa.