2013-09-11 3 views
12

У меня есть функция полезности, оборачивает console.log с условием, поэтому мы только называем console.log, если мы находимся в среде Dev и console.log существует:Попутный несколько аргументов 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

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

ответ

21

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

И код ниже:

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

Большое спасибо Idham, приятное решение! –

+0

Есть ли какое-либо решение для применения цветов, а также для регистрации всех аргументов? – Nicholas

+1

Работал для меня. Благодаря! – Japanish

0

Try что-то вроде этого

/* 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.

+0

Спасибо Джастин, - но это решение будет работать, если я прошел metro.conlog ('Foo') и metro.conlog ('Foo', MyObject, anotherObject «бар '), как я могу сделать с реальным журналом консоли? –

+0

Если вы хотите использовать его так. вы можете просто использовать 'console.log (arguments);' и это поместит все аргументы, которые вы дали своей функции. Я не уверен в совместимости с браузером. Я знаю, что он работает в хроме, firefox и сафари. Я сделаю редактирование на мой ответ. –

+2

вы хотите использовать console.log.apply (console, arguments) – hagbard

Смежные вопросы