作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我做了以下自定义日志功能来打印所有控制台日志消息。使用此功能,我可以使用单个标志变量来控制在整个应用程序中打印或不打印日志。
var Utilities = {
showLogs: true,
printLog: function (msg) {
if (this.showLogs) {
console.log(msg);
}
}
};
我称之为:
Utilities.printLog("a message to print on console");
它按预期工作正常。但它有一个限制,即它没有显示正确的行号和调用它来打印日志的文件名。
一个解决方案是提供额外的参数来打印行号和文件名以及消息。
例如:
Utilities.printLog("a message to print on console", "10","common.js");
Utilities.printLog("a message to print on console", "310","myLib.js");
我不想要这些额外参数,想知道是否还有其他可用选项。
更新:
我尝试了 V8 的 Stack Trace API http://code.google.com/p/v8/wiki/JavaScriptStackTraceApi但它仅在 try catch block 内生成异常时有用。
首先覆盖 Error.prepareStackTrace 并创建一个跟踪函数,如下所示:
Error.prepareStackTrace = function(error, stack) {
return stack;
};
function getTrace(e) {
var stack = e.stack;
var trace = "";
for (var i = 0; i < stack.length; i++) {
trace += "\r" + stack[i];
}
return trace;
}
并创建了两个示例 js 文件。
libObj.js
var libObj = {
getCube: function(x){
return mathLib.cube( x );
}
};
mathLib.js
var mathLib = {
cube: function(x){
return evilObj * x * x; //see the undefined evilObj --- lets catch trace here
}
};
现在我从第三个 js 文件(或者在我的例子中是在 HTML 文件中)调用 try catch block 中的函数来查看易受攻击代码的精确跟踪。
<script type="text/javascript">
try {
var results;
results = libObj.getCube(2);
console.log( results );
} catch (e) {
console.log( getTrace(e));
}
</script>
现在我得到了易受攻击代码的踪迹:
注意:- 如果您不覆盖 Error.prepareStackTrace,那么它会提供我认为格式良好的跟踪...尽管两者具有相同的信息。
没有覆盖Error.prepareStackTrace:
现在问题仍然悬而未决,我如何为我的自定义日志函数捕获类似的跟踪,如上定义。
最佳答案
你可以这样做:
var Utilities=
{
showLogs:true,
printLog:function(msg){
if(!this.showLogs) return 0;
var k=new Error().stack.split("\n").slice(2);
k.unshift(msg);
console.log(k.join("\n"));
}
}
关于javascript - 自定义日志功能如何打印行号和调用它的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26964005/
我是一名优秀的程序员,十分优秀!