it-swarm.com.de

Mehrere Argumente an console.log übergeben

Ich habe eine Utility-Funktion, die console.log mit einer Bedingung umschließt. Daher rufen wir console.log nur auf, wenn wir in der dev-Umgebung sind und console.log vorhanden ist:

/* Console log if environment has debug true or #debug initially passed in URL */
metro.conlog = (function () {
    return function (message) {
        if ((metro.siteData.debug || metro.hashOptions.hasOwnProperty('debug')) && window.console && message) {
            console.log(message);
        }
    };
}());

Dies hat sehr gut für normale Konsolenprotokolle funktioniert. Ich habe jedoch kürzlich die Freude entdeckt, mehr als ein Argument an console.log übergeben zu können: Es ermöglicht Ihnen, einem Konsolenprotokoll einen String voranzustellen. console.log('DEBUG', object) gibt den String plus ein erweiterbares Objekt aus, dessen Eigenschaften Sie überprüfen können. Wie kann ich meine Conlog-Funktion dafür ändern? Ich habe versucht, alle Argumente wie folgt abzumelden:

metro.conlog = (function () {
    return function (message) {
        if ((metro.siteData.debug || metro.hashOptions.hasOwnProperty('debug')) && window.console && message) {
            console.log(arguments);
        }
    };
}());

Dies gibt jedoch die Argumente als Array aus, anstatt der ordentlichen Zeile, die Sie mit console.log erhalten. Sie können den Unterschied in diesem Screenshot sehen: 

enter image description here

Kann mir jemand sagen, wie ich die ursprüngliche Protokollausgabe reproduzieren kann?

14
And Finally

Natürlich können Sie es tun, dies ist eine Demo, wie Sie genau das tun, was Sie benötigen, mit zusätzlichen Optionen.

Und der Code ist unten:

var mylog = (function () {
    return {
        log: function() {
            var args = Array.prototype.slice.call(arguments);
            console.log.apply(console, args);
        },
        warn: function() {
            var args = Array.prototype.slice.call(arguments);
            console.warn.apply(console, args);
        },
        error: function() {
            var args = Array.prototype.slice.call(arguments);
            console.error.apply(console, args);
        }
    }
}());

var name = "Alex";
var arr = [1, 2, 3];
var obj = { a:1, b:2, c:3 };
var hello = function(msg){alert(msg);};
mylog.log("Name: ", name);
mylog.log("Window Debug: ", window);
mylog.error("Some error happened");
mylog.warn("Ahh... Warning", arr, obj);
mylog.log("more parameters: ", arr, obj, hello);
26

Versuchen Sie so etwas

/* Console log if environment has debug true or #debug initially passed in URL */
metro.conlog = (function () {
    return function (message, object) {
        if ((metro.siteData.debug || metro.hashOptions.hasOwnProperty('debug')) && window.console && message) {
            console.log(message, object);
        }
    };
}());

dabei ist message etwas wie "DEBUG" und object das Objekt, das Sie untersuchen möchten.

Wenn Sie eine beliebige Anzahl von Argumenten in console.log übergeben möchten, würde ich vorschlagen, die Variable arguments zu verwenden.

/* Console log if environment has debug true or #debug initially passed in URL */
    metro.conlog = (function () {
        return function (message, object) {
            if ((metro.siteData.debug || metro.hashOptions.hasOwnProperty('debug')) && window.console && message) {
                console.log(arguments);
            }
        };
    }());

Wie in meinen Kommentaren erwähnt, bin ich mir nicht sicher, welche Browser dies vollständig unterstützen (ich sehe Sie an, IE).

Ich habe getestet und bestätigt, dass es in aktuellen Chrome, FireFox und Safari funktioniert.

1
Justin Wood