Pregunta

Tengo un montón de llamadas en mi console.log() JavaScript.

¿Debo comentar a cabo antes de que se despliegan para la producción?

Me gustaría dejarlos allí, así que no tiene que ir a la molestia de volver a añadir los comentarios más adelante si tengo que hacer nada más depuración. ¿Es esta una mala idea?

¿Fue útil?

Solución

Esto causará errores de Javascript, que termina la ejecución del bloque de Javascript que contiene el error.

Se podría, sin embargo, define una función ficticia que es un no-op cuando Firebug no está activa:

if(typeof console === "undefined") {
    console = { log: function() { } };
}

Si utiliza cualquiera de los métodos que no sean log, que tendría que apagar esos también.

Otros consejos

Como otros ya han señalado que, dejándolo en provocará errores en algunos navegadores, pero esos errores se puede evitar mediante el establecimiento de unos tetones.

Sin embargo, no sólo me gustaría comentar a cabo, pero de plano eliminar esas líneas. Sólo parece descuidado a hacer otra cosa. Tal vez estoy siendo pedante, pero no creo que la "producción" código debe incluir el código de "depuración" en absoluto, incluso en forma comentado. Si deja comentarios en absoluto, los comentarios deben describir lo que el código está haciendo, o el razonamiento detrás de él - no bloques de código bloqueado. (Aunque, la mayoría de los comentarios se deben quitar automáticamente por el proceso de minimización. Usted está minimizando, ¿verdad?)

Además, en varios años de trabajo con JavaScript, no puedo recordar que siempre vuelve a una función y diciendo "Gee, deseo que había dejado en su lugar esos console.logs aquí!" En general, cuando estoy "hecho" con el trabajo en una función, y luego tener que volver a ella, voy a volver a arreglar algún otro problema. Lo que ese nuevo problema es que, si los console.logs de una ronda previa de la obra podría haber sido útil, entonces yo he visto el problema por primera vez. En otras palabras, si vuelvo a algo, no estoy probable que necesita exactamente la misma información de depuración, ya que necesitaba en ocasiones anteriores.

Sólo mis dos centavos ... Buena suerte!

Si usted tiene un script de implementación, puede utilizarlo para despojar a cabo las llamadas a console.log (y minify el archivo).

Mientras estás en ello, se puede tirar sus JS a través JSLint y registrar las violaciónes de inspección (o impedir el despliegue).

Este es un gran ejemplo de por qué desea automatizar su implementación. Si su proceso le permite publicar un archivo js con console.logs en que, en algún momento lo hacen.

A mi conocimiento no existe un método más corto del apagando console.log de los siguientes 45 caracteres:

window.console||(console={log:function(){}});

Esta es la primera de las 3 versiones diferentes dependiendo de qué métodos de comunicación desee apagar todos ellos son muy pequeños y todos han sido probados en IE6 + y los navegadores modernos.

Las otras dos versiones de la cubierta variando otros métodos de consola. Uno cubre los cuatro elementos básicos y el otro cubre todos los métodos conocidos para la consola de Firebug y webkit. Una vez más, en el archivo más pequeño los tamaños posibles.

Ese proyecto está en GitHub: https://github.com/andyet/ConsoleDummy.js

Si usted puede pensar en alguna manera de minimizar el código adicional, las contribuciones son bienvenidas.

- Edición - 16 de mayo de 2012

Desde entonces, he mejorado en este código. Es aún muy pequeños, pero añade la capacidad de convertir la salida de la consola de encendido y apagado: https://github.com/HenrikJoreteg/andlog

aparece en la lista de cambios Mostrar

Al menos debe crear una console.log ficticia si no existe el objeto para que su código no se generan errores en las máquinas de los usuarios sin Firebug instalado.

Otra posibilidad sería para activar el registro sólo en 'modo de depuración', es decir, si un determinado indicador se establece:

if(_debug) console.log('foo');
_debug && console.log('foo');

Esperamos que ayude a alguien -. Escribí un contenedor para que un tiempo atrás, su ligeramente más flexible que la solución aceptada

Obviamente, si utiliza otros métodos como console.info etc, puede replicar el efecto. cuando se hace con el entorno de ensayo, basta con cambiar el valor por defecto C.debug en false para la producción y usted no tendrá que cambiar cualquier otro código / tomar las líneas de salida, etc. muy fácil volver a depurar y más adelante.

var C = {
    // console wrapper
    debug: true, // global debug on|off
    quietDismiss: false, // may want to just drop, or alert instead
    log: function() {
        if (!C.debug) return false;

        if (typeof console == 'object' && typeof console.log != "undefined") {
            console.log.apply(this, arguments); 
        }
        else {
            if (!C.quietDismiss) {
                var result = "";
                for (var i = 0, l = arguments.length; i < l; i++)
                    result += arguments[i] + " ("+typeof arguments[i]+") ";

                alert(result);
            }
        }
    }
}; // end console wrapper.

// example data and object
var foo = "foo", bar = document.getElementById("divImage");
C.log(foo, bar);

// to surpress alerts on IE w/o a console:
C.quietDismiss = true;
C.log("this won't show if no console");

// to disable console completely everywhere:
C.debug = false;
C.log("this won't show ever");

Esto parece funcionar para mí ...

if (!window.console) {
    window.console = {
        log: function () {},
        group: function () {},
        error: function () {},
        warn: function () {},
        groupEnd: function () {}
    };
}

pensé que iba a compartir una perspectiva diferente. Dejando este tipo de salida visible para el mundo exterior en una aplicación de PCI hace que no conforme.

Estoy de acuerdo que el talón de la consola es un buen enfoque. He intentado varios plugins de consola, fragmentos de código, incluyendo algunas bastante complejas. Todos ellos tenían algún problema en al menos un navegador, así que terminamos yendo con algo sencillo como el de abajo, que es una amalgama de otros fragmentos que he visto y algunas sugerencias del equipo de YUI. Parece que funciona en IE8 +, Firefox, Chrome y Safari (para Windows).

// To disable logging when posting a production release, just change this to false.
var debugMode = false;

// Support logging to console in all browsers even if the console is disabled. 
var log = function (msg) {
    debugMode && window.console && console.log ? console.log(msg) : null;
};

Nota: Es compatible con deshabilitar el registro a la consola a través de una bandera. Tal vez podría automatizar este a través de scripts de construcción también. Como alternativa, puede exponer a la interfaz de usuario o algún otro mecanismo para voltear esta bandera en tiempo de ejecución. Usted puede conseguir mucho más sofisticado, por supuesto, con niveles de registro, presentación ajax de registros basado en el umbral de registro (por ejemplo, todas las declaraciones de nivel de error se transmiten al servidor para su almacenamiento en él, etc.).

Muchos de estos temas / preguntas en torno a la tala parecen pensar de declaraciones de registro como el código de depuración y no código instrumentación . De ahí el deseo de eliminar las declaraciones de registro. La instrumentación es muy útil cuando una aplicación está en la naturaleza y que ya no es tan fácil de adjuntar un depurador o información que se alimenta a partir de un usuario o por medio de apoyo. Nunca se debe registrar nada sensible, independientemente del lugar en que ha sido conectado a lo que la privacidad / seguridad no debe verse comprometida. Una vez que se piensa en el registro como la instrumentación que ahora se convierte en el código de producción y debe ser escrito con el mismo estándar.

Con las aplicaciones que utilizan JavaScript cada vez más compleja instrumentación Creo que es fundamental.

Como otros tienen menciona que será lanzado un error en la mayoría de los navegadores. En Firefox 4 no generará un error, el mensaje se registra en la consola de desarrollador web (nuevo en Firefox 4).

Una solución para este tipo de errores que me gustó mucho fue de && fallo :

var de = true;
var bug = function() { console.log.apply(this, arguments); }

// within code
de&&bug(someObject);

A agradable de una sola línea:

(!console) ? console.log=function(){} : console.log('Logging is supported.');
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top