javascript 抽象控制台日志记录
Posted
技术标签:
【中文标题】javascript 抽象控制台日志记录【英文标题】:javascript abstract console logging 【发布时间】:2011-10-11 00:10:22 【问题描述】:我想做一个函数,像这样。
例如:
function Logger()
this.log = function(msg)
console.log(msg);
我想在函数/模块等中使用它,一切正常。 但是我浏览器中的默认控制台通常会给出 fileName + lineNumber。
现在,当我抽象此功能时,fileName
和 lineNumber
不在我放置 instance.log() 的位置。因为它会说从哪里调用 console.log,而不是函数本身。
所以我的问题:
如何从我想使用我的记录器的地方获取正确的信息? 或者请给我任何改进此功能的提示。
【问题讨论】:
您使用什么记录应用程序来放置行号和文件名? 默认检查器,可用于 Chrome、Safari 等 【参考方案1】:function Logger()
this.log = console.log.bind(console);
我前段时间问过这个问题:Create shortcut to console.log() in Chrome。
【讨论】:
【参考方案2】:尝试分配函数:
(function ()
window.log = (console && console.log
? console.log
: function ()
// Alternative log
);
)();
稍后只需在您的代码中调用log('Message')
。
【讨论】:
【参考方案3】:尝试使用类似这样的回溯功能:
function printStackTrace()
var callstack = [];
var isCallstackPopulated = false;
try
i.dont.exist += 0; //doesn't exist- that's the point
catch (e)
if (e.stack) //Firefox
var lines = e.stack.split('\n');
for (var i = 0, len = lines.length; i & lt; len; i++)
if (lines[i].match(/^\s*[A-Za-z0-9\-_\$]+\(/))
callstack.push(lines[i]);
//Remove call to printStackTrace()
callstack.shift();
isCallstackPopulated = true;
else if (window.opera & amp; & amp; e.message) //Opera
var lines = e.message.split('\n');
for (var i = 0, len = lines.length; i & lt; len; i++)
if (lines[i].match(/^\s*[A-Za-z0-9\-_\$]+\(/))
var entry = lines[i];
//Append next line also since it has the file info
if (lines[i + 1])
entry += ' at ' + lines[i + 1];
i++;
callstack.push(entry);
//Remove call to printStackTrace()
callstack.shift();
isCallstackPopulated = true;
if (!isCallstackPopulated) //IE and Safari
var currentFunction = arguments.callee.caller;
while (currentFunction)
var fn = currentFunction.toString();
var fname = fn.substring(fn.indexOf( & amp; quot;
function & amp; quot;) + 8, fn.indexOf('')) || 'anonymous';
callstack.push(fname);
currentFunction = currentFunction.caller;
output(callstack);
function output(arr)
//Optput however you want
alert(arr.join('\n\n'));
【讨论】:
谢谢,能不能具体点,具体是做什么的,什么时候用,怎么用?以上是关于javascript 抽象控制台日志记录的主要内容,如果未能解决你的问题,请参考以下文章
使用 Firefox 将 JavaScript 控制台记录到日志文件中