Подтвердить что ты не робот

Передача нескольких аргументов в console.log

У меня есть функция утилиты, которая обертывает console.log условием, поэтому мы вызываем только console.log, если мы находимся в среде dev, и console.log существует:

/* 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);
        }
    };
}());

Это хорошо работает для обычных консольных журналов. Но недавно я обнаружил радости передачи более чем одного аргумента console.log: он позволяет вам префикс журнала консоли с помощью строки, поэтому console.log('DEBUG', object) выводит строку плюс расширяемый объект, свойства, которые вы можете проверить. Как я могу изменить функцию conlog для этого? Я попытался вывести все аргументы следующим образом:

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

Но это выводит аргументы как массив, а не опрятную строку, которую вы получаете с console.log. Вы можете увидеть разницу в этом скриншоте:

enter image description here

Может ли кто-нибудь сказать мне, как я могу воспроизвести исходный выход журнала?

4b9b3361

Ответ 1

Конечно, вы можете это сделать, это демонстрация того, как делать именно то, что вам нужно, с добавлением дополнительных опций.

И код ниже:

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);

Ответ 2

Попробуйте что-то вроде этого

/* 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);
        }
    };
}());

где message - это что-то вроде "DEBUG", а object - это любой объект, который вы хотите изучить.

Если вы хотите передать произвольное количество аргументов в console.log, я бы предложил использовать переменную arguments.

/* 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);
            }
        };
    }());

Как упоминалось в моих комментариях, я не уверен, что браузеры полностью поддерживают это (я смотрю на вас IE).

Я протестировал и подтвердил, что он работает в текущих браузерах Chrome, FireFox и Safari.