function log( msgOrObj ){
if(dev_mode){
console.log({
'message': msgOrObj,
'caller': arguments.callee.caller.toString()
});
}
}
因此,我尝试编写一个简单的自定义控制台日志功能(如上所述)。但是,我正在努力寻找呼叫者来自哪个文件和行。我最多能看到的是调用它的函数。
有人做过类似的事情吗?还是有可能吗?
第70行在somescript.js中使用的示例:
log('some very important message!')
所以,这就是我最后的目的(其中shout是仅在开发人员模式下运行的定制功能):
function log( msgOrObj ){
if(dev_mode){
if( typeof(window.console) != 'undefined' ){
try { invalidfunctionthrowanerrorplease(); }
catch(err) { var logStack = err.stack; }
var fullTrace = logStack.split('\n');
for( var i = 0 ; i < fullTrace.length ; ++i ){
fullTrace[i] = fullTrace[i].replace(/\s+/g, ' ');
}
var caller = fullTrace[1],
callerParts = caller.split('@'),
line = '';
//CHROME & SAFARI
if( callerParts.length == 1 ){
callerParts = fullTrace[2].split('('), caller = false;
//we have an object caller
if( callerParts.length > 1 ){
caller = callerParts[0].replace('at Object.','');
line = callerParts[1].split(':');
line = line[2];
}
//called from outside of an object
else {
callerParts[0] = callerParts[0].replace('at ','');
callerParts = callerParts[0].split(':');
caller = callerParts[0]+callerParts[1];
line = callerParts[2];
}
}
//FIREFOX
else {
var callerParts2 = callerParts[1].split(':');
line = callerParts2.pop();
callerParts[1] = callerParts2.join(':');
caller = (callerParts[0] == '') ? callerParts[1] : callerParts[0];
}
console.log( ' ' );
console.warn( 'Console log: '+ caller + ' ( line '+ line +' )' );
console.log( msgOrObj );
console.log({'Full trace:': fullTrace });
console.log( ' ' );
} else {
shout('This browser does not support console.log!')
}
}
}
log()在应用程序的其余部分之前声明时,可以在应用程序内的任何位置调用,并为开发人员提供所需的所有信息,而且不会耗尽开发人员模式。
(http://webconfiguration.blogspot.co.uk/2013/12/javascript-console-log-wrapper-with.html)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句