Javascript 如何使console.log可配置
在我的web应用程序(客户端重,服务器端轻)中,在开发过程中,我需要进行大量调试,Javascript 如何使console.log可配置,javascript,Javascript,在我的web应用程序(客户端重,服务器端轻)中,在开发过程中,我需要进行大量调试,console.log非常有用,但理想情况下在生产过程中,不能显示任何调试消息,因此我计划添加以下代码: window.production = false; // set to true when in production mode. if(window.production){ window.log = function(){}; }else{ window.log = funct
console.log
非常有用,但理想情况下在生产过程中,不能显示任何调试消息,因此我计划添加以下代码:
window.production = false; // set to true when in production mode.
if(window.production){
window.log = function(){};
}else{
window.log = function(){
console.log.apply(console, arguments);
};
}
//then replace all console.log(a, b, c, ...) into window.log(a, b, c, ...) in my code.
这是一种使调试可配置的好方法,还是我必须制作一个
grunt
,删除所有console.log
生产行?因此,如果您唯一的最终目标是不在生产中显示调试消息,那么您有大量的选项可供选择!您还应决定以下事项对您是否重要:
if (window.console && window.console.log)
{
window.log = console.log.bind(console); // function devnull() { };
}
else
{
window.log = function() { };
}
log('This is a log!');
将足以让您打开/关闭日志记录。这将实现上面列表中的目标(5),并且效果非常好
另一种与uglify这样的小型化程序配合使用的解决方案可以删除死代码,它可以在日志语句周围使用以下内容(但是,您可能不想污染全局名称空间):
这将满足条件(1)、(3)和(4),并使您以(5)为代价求解(2)
与预定义的调试常量(或类似常量)相结合,在构建步骤中,您可以使用正则表达式替换日志语句:
productionCode = debugCode.replace(/ShouldLog\(((?!LogLevels\.Error|LogLevels\.Warning)[^)]*)\)/g, 'DEBUG');
这将完全删除代码中的无错误和无警告级别日志记录,并满足(2)。你真的不想让别人偷看你的日志吧。。加上更好的性能!:)
奖金
如果您想获得额外的时髦感,可以使用以下方法(至少在Chrome中)为控制台中的每个日志记录语句获取堆栈跟踪。没有更多的“为什么这日志被击中”
window.log = function ()
{
console.groupCollapsed.apply(console, arguments);
var stack = new Error().stack.split('\n');
for(var i = 2; i < stack.length; i ++)
{
// Trim and remove 'at ';
console.log('%c' + stack[i].trim().substring(3), 'padding-left: 10px; color: #777');
}
console.groupEnd();
};
window.log=函数()
{
console.groupCollapsed.apply(控制台,参数);
var stack=new Error().stack.split('\n');
对于(变量i=2;i
如果您使用的是诸如或之类的构建工具,那么有一些模块可以做到这一点:
window.log = function ()
{
console.groupCollapsed.apply(console, arguments);
var stack = new Error().stack.split('\n');
for(var i = 2; i < stack.length; i ++)
{
// Trim and remove 'at ';
console.log('%c' + stack[i].trim().substring(3), 'padding-left: 10px; color: #777');
}
console.groupEnd();
};